本帖最后由 浮华、缠绕指尖 于 2015-5-2 23:07 编辑
在VBA中的网抓,个人更倾向于使用winHttp对象,(即createobject("winHttp.winHttprequest.5.1")对象,前期引用为Microsoft WinHttp开始的),逐渐摒弃了刚学网抓时的xmlHttp对象。一个最主要的原因是winHttp相对于xmlHttp更底层一些,对于cookie的共享,xmlhttp的cookie主要存在于两部分,第一是IE,第二是Office本身中,有点相当于是长期存在的感觉,所以清缓存这一步就变得相对复杂,先要清除IE然后在重启Office。而在winHttp中对于这一点就变得相对简单了,sub一结束cookie就Game Over了。 为什么我会这么在乎cookie呢,一个是实时更新,一个是存在登录的,具体原因大家可想而知。所以在我的网抓中几乎很少涉及到模拟cookie这一步。 再来简单的说说winHttp对象,winHttp中有六大属性,十二大方法以及四个事件,分别如下: 属性 | 方法 | 事件 | Status | SetProxy | OnError | StatusText | SetCredentials | OnResponseDataAvailable | ResponseText | Open | OnResponseFinished | ResponseBody | SetRequestHeader | OnResponseStart | ResponseStream | GetResponseHeader |
| Option
| GetAllResponseHeaders |
|
| Send |
|
| WaitForResponse |
|
| Abort |
|
| SetTimeouts |
|
| SetClientCertificate |
|
| SetAutoLogonPolicy |
|
同步和异步的设置是在Open方法中,即: Sub Open(Method As String, Url As String, [Async]),最后一个parameter设置成true时为异步,false为同步 这里来讨论一下winHttp中同步和异步方式的异同: 同步
| 异步 | 阻塞线程(大量翻页过程中假死,相信很多人都遇到过) | 不会阻塞纯程,所以也就不会假死(卡界面) | 支持四种超时(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout),分别为DNS解析,连接,发送以及接受 | 只支持一种超时,那就是等待,如果在设置的时间内没有数据,那么就是超时 | ~ | 支持回调,换句话说就是CallBack或者是Event |
|