- 大学二年级
- 2420156
- 733
- 6
- 418 朵
- 7192 个
- 657 个
- 29800
- 2014-03-18
|
1#
t
T
发表于 2015-04-26 19:16
|
|只看楼主
本帖最后由 michael3636 于 2015-4-27 19:52 编辑 PART 2
我在 PART 1 里面提到过,无论是客户端请求还是服务器反馈,内容都分2个部分:
- 客户端跟服务器之间的交流内:我们一般把这个称为 头部(Header)
- 我们请求的和返回的实际内容.我们一般把这部分称为 主体或者内容(Content)
开发工具准备:XHR不是我们想怎么写就怎么写的,要使用它的所有功能,我们离不开辅助工具
- 火狐+firebug插件 或者 chrome (个人推荐火狐,因为我习惯火狐..哈哈哈)
- 返回来的源文件我们可以黏贴到记事本看,,但是记事本看起来很麻烦,建议装个Notepad++,这个文本处理器可以把html文件显示得花花绿绿.方便我们查看
- Fiddler 这个不是必须得,如果你不习惯用浏览器查看数据,你可以装它.超级牛掰的一个http协议抓包工具,它不是必须的
让我们开始上路吧,用实例说话 - URL="http://bbs.anjian.com/forum.php?mod=forumdisplay&fid=17" //按键论坛综合版块的地址
- Set http = CreateObject("WinHttp.WinHttpRequest.5.1")//创建XHR对象,这个对象刚诞生,没有cookie,没有缓存一干二净!!!
- http.open "GET", url,false//调用open方法(每次请求必须先open)用"GET"方式提交请求,提交请求的网址,异步工作模式:关
- http.send //这行才是发送请求,如果上面第三个参数是false,代码到这行就暂停了,直到服务器返回网页代码或者超时(请求失败),代码才会继续往下执行
- If Not isEmpty(http.responsetext) Then //如果返回的文本文本格式内容存在
- Plugin.Sys.SetCLB http.responsetext//把请求到的源代码放到剪贴板,可以让我们黏贴到文本里检查得到点什么东西,为啥不用messagebox显示,东西太多显示不完嘛
- Else
- MessageBox "失败"
- End If
- //此时:对象完成了一次请求,如果成功的话,对象有了按键论坛给它的cookie和缓存,全在对象里,换而言之全在内存里,它不会像浏览器一样根据服务器指示把cookie或者扔硬盘或者扔内存,多干净啊...
复制代码 那要是没"?"呢?这不是多问么,那不就是POST带着""(空内容)去网址提交数据么..... 多说无益,让俺们用事实来证明吧:把上面的代码改一下下,改成POST - URL = "http://bbs.anjian.com/forum.php" //改成post提交数据的地址("?"前面的哪些)
- str ="mod=forumdisplay&fid=17" //把提交的数据放在变量("?"后面的哪些)
- Set http = CreateObject("WinHttp.WinHttpRequest.5.1")//创建XHR对象
- http.open "POST", url, false//改成POST方式提交
- http.setrequestheader "Content-Type", "application/x-www-form-urlencoded" //在header里设置提交提交的数据类型(post方式必须的)
- http.setrequestheader "Content-Length",len(str) //在header设置提交的数据的长度,其实就是字符串长度嘛(post方式必须的)
- http.send str //开始发送,提交的内容在这呢,..看到米...
- If Not isEmpty(http.responsetext) Then
- Plugin.Sys.SetCLB http.responsetext
- Else MessageBox "失败"
- End If
复制代码事实证明,2者的结果是一样的.我们都得到了按键综合版块的源代码,只不过嘛..POST写起来要比GET多打很多字啊,所以为了少打字,能GET的还是GET吧,不能GET的才去考虑POST
点评
dingojia
这系列帖子,真心极好。厘清了很多问题
发表于 2017/1/17 4:05:27
|