发送 HTTP 请求时,首先想到的一般是 Msxml2.XMLHTTP(Microsoft.XMLHTTP 已经不提倡使用了)。

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP 访问提供方法和属性。您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。

由于 XMLHTTP 内部使用 WinInet,所以不支持在服务器端应用程序(例如 Active Server
Pages (ASP))、宿主在 COM+ 中的组件,或 Windows 服务中使用 XMLHTTP。

XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet
(WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈
WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。

ServerXMLHTTP 推荐用于服务器应用程序,而 XMLHTTP
推荐用于客户端应用程序。

在大部分情况下,Msxml2.XMLHTTP 能够很好地完成工作,因为它是有缓存的。比如,我们用 Msxml2.XMLHTTP 发送 HTTP
POST 请求模拟登陆了某个网站,它会把登陆时的 Cookie 和 Session 缓存下来,当我们想获取网站的数据时直接 HTTP GET
就行了,不需要人工发送 Cookie 和 Session。

但是,在有些时候,缓存会给我们造成麻烦。比如我们要写一个 VBS
脚本暴力破解某个网站的账号,假设我们已经破解了一个账号,继续破解时,由于缓存的关系,网站会认为我们已经登陆了,这样会干扰我们判断账号是否破解成功。也就是说,当成功破解一个账号后,需要多加几行代码登出这个账号。在这种情况下,就应该使用没有缓存的
Msxml2.ServerXMLHTTP。

总结一下就是,如果需要缓存,则用 Msxml2.XMLHTTP;否则应该用 Msxml2.ServerXMLHTTP。

简单的发送Get请求方法

Public Function getWeb(ByVal url As String) As String
On Error GoTo
ErrHandle

If Len(url) > 4 And LCase(Left(url, 4)) = "http" Then
        Dim x
As XMLHTTP
        Set x = New XMLHTTP
        x.Open "GET", url,
False
        x.send
        getWeb = x.responseText
   
Else
        getWeb = ""
    End If
   
    Exit
Function
ErrHandle:
   
    getWeb = ""
End Function

下面是可以设定超时时间的请求类
BEGIN
  MultiUse = -1  'True
  Persistable = 0 
'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  =
0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute
VB_Name = "serverXMLHTTP_Class"
Attribute VB_GlobalNameSpace =
False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId =
False
Attribute VB_Exposed = False
Option Explicit

'///////////////////////CODE BY
ENVON,goojjie@163.com//////////////////////////////////////
Private Declare
Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Http
Private Sub wait(tt)
    Dim t, t1, t2, i
    t =
tt
    If t > 10 Then
        t1 = Int(t / 10)
        t2 = t - t1 *
10
        For i = 1 To t1
        Call Sleep(10)
       
DoEvents
        Next i
        If t2 > 0 Then Call Sleep(t2)
   
Else
        If t > 0 Then Call Sleep(t)
    End If
End Sub

Public Function GetCode(ByVal gUrl As String, pm, Optional gRef, Optional
gCok)
    On Error Resume Next
    If LCase(left(gUrl, 4)) <> "http"
Then gUrl = "http://" & gUrl
    Http.Open "GET", gUrl, True
    If
gRef <> "" Then Http.SetRequestHeader "Referer", gRef
    If gCok
<> "" Then Http.SetRequestHeader "Cookie", gCok
    Http.Send
   
Dim waitTimeOut, secondNumber
    waitTimeOut = 0
    secondNumber = 30
'超时多少秒
    Do
    DoEvents
    wait 10
    waitTimeOut = waitTimeOut
+ 1
    Loop Until (Http.ReadyState = 4 Or waitTimeOut >= 100 *
secondNumber)
    If Http.ReadyState = 4 Then
        GetCode =
BytesToBstr(Http.ResponseBody, pm)
    Else
        GetCode = ""
   
End If
End Function

Public Function PostData(PostUrl, PostStr, PostCok, PostRef, pm, Optional
header)
    On Error Resume Next
    If LCase(left(PostUrl, 4)) <>
"http" Then PostUrl = "http://" & PostUrl
    If PostCok = "" Then
PostCok = "ASPSESSIONIDAQACTAQB=HKFHJOPDOMAIKGMPGBJJDKLJ;"
    PostCok =
Replace(PostCok, Chr(32), "%20")
    With Http
        .Open "POST",
PostUrl, True
        .SetRequestHeader "Content-Length",
Len(PostStr)
        .SetRequestHeader "Content-Type",
"application/x-www-form-urlencoded"
        .SetRequestHeader "Referer",
PostRef
        .SetRequestHeader "Cookie", PostCok
        .Send
PostStr
    End With
    Dim waitTimeOut, secondNumber
    waitTimeOut
= 0
    secondNumber = 30 '超时多少秒
    Do
    DoEvents
    wait
10
    waitTimeOut = waitTimeOut + 1
    Loop Until (Http.ReadyState = 4
Or waitTimeOut >= 100 * secondNumber)
    If Http.ReadyState = 4
Then
        PostData = BytesToBstr(Http.ResponseBody, pm)
   
Else
        PostData = ""
    End If
    header =
Http.getAllResponseHeaders()
End Function

Private Function BytesToBstr(body, Cset)
    On Error Resume
Next
    Dim objstream
    Set objstream =
CreateObject("adodb.stream")
    objstream.Type = 1
    objstream.mode =
3
    objstream.Open
    objstream.write body
    objstream.Position =
0
    objstream.Type = 2
    objstream.Charset = Cset
    BytesToBstr =
objstream.ReadText
    objstream.Close
    Set objstream = Nothing
End
Function

Private Sub Class_Initialize()
    Set Http =
CreateObject("Msxml2.XMLHTTP")
End Sub

Private Sub Class_Terminate()
    Set Http = Nothing
End Sub

用Msxml2.XMLHTTP 与 Msxml2.ServerXMLHTTP 发生网页请求的更多相关文章

  1. nvmw install 失败. 需修改"Msxml2.XMLHTTP"为"Msxml2.ServerXMLHTTP"

    准备在windows下学习nodejs. 下载了nvmw . 但没法安装node的任何版本. 都是报错如下: C:\Users\WXG>nvmw install v0.12.0 x86 Star ...

  2. MSXML2.XMLHTTP.4.0对象

    一.使用步骤:1.创建XMLHTTP对象 //需MSXML4.0支持2.打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等.客户端通过Open命令打开与服务端的服务网页的连接.与 ...

  3. 使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息

    ARP欺骗的作用 当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧 当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一 ...

  4. python网页请求urllib2模块简单封装代码

    这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...

  5. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  6. 如何使用IE9浏览器自带开发人员工具捕获网页请求

    我们在通过浏览器访问一个网页的时候,有时候会遇到页面不能正常显示,图片不能正常加载的问题. 如果我们需要知道浏览器打开该网页时,网页中每个元素的加载情况.这时,我们便可以借助浏览器自带开发人员工具,来 ...

  7. HTTP网页请求状态码

    我们平时在打开一些网页的时候,会遇到打不开的情况,页面提示404错误,这个404就是http状态码.如果我们可以正常打开网页,这时也会有http状态码的,这个状态码就是200,只不过这时我们是无法通过 ...

  8. 只要发生ajax请求时加载旋转的按钮

    定义一个变量 全局 c 只要发生ajax时给c++ 当ajax请求success或者error时,c--; 对加载的按钮添加个事件   监听 c  如果c得值没变化  则隐藏按钮   如果变化了则显示 ...

  9. 防止用户重发发生ajax请求

    1.前端限制 点击提交后,将该元素禁用,等待请求结束后再次释放(解除禁用). 可以使用ajax中的 success 请求成功后的回调函数进行按钮释放. 2.防抖动 暴力连续点击按钮,可以通过闭包里的  ...

随机推荐

  1. 如何高效利用 GitHub

    正是 Github,让社会化编程成为现实.本文尝试谈谈 GitHub 的文化.技巧与影响. Q1:GitHub 是什么 Q2:GitHub 风格 Q3: 在 GitHub,如何跟牛人学习 Q4: 享受 ...

  2. hybird app项目实例:安卓webview中HTML5拍照图片上传

    应用的平台环境:安卓webview: 涉及的技术点: (1) <input type="file" > :在开发中,安卓webview默认点击无法调用文件选择与相机拍照 ...

  3. 115. Distinct Subsequences *HARD* -- 字符串不连续匹配

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  4. Ubuntu下XTerm乱码问题的解决及XTerm的简单配置

    本人比较喜欢Ubuntu这个Linux的发行版,主要是安装程序插件什么的都比较方便,推荐新手使用,可以免去很多麻烦的配置,将注意力放在编程的学习上,当然如果是想专门学Linux的,还是推荐在Cento ...

  5. SGU 156 Strange Graph 欧拉回路,思路,汉密尔顿回路 难度:3

    http://acm.sgu.ru/problem.php?contest=0&problem=156 这道题有两种点 1. 度数>2 在团中的点,一定连接一个度数为2的点 2. 度数等 ...

  6. Centos安装Chrome浏览器失败解决办法

    最近因为项目需要使用到Centos,自己经常使用Chrome,所有的书签以及信息都是同步在Google,所以尝试在Centos上安装Chrome,按照网上的资料都是安装失败,显示缺少资源,不过最终还是 ...

  7. Alpha阶段第1周Scrum立会报告+燃尽图 05

    作业要求与https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246相同 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 周 ...

  8. 原创:形象的讲解angular中的$q与promise

    promise不是angular首创的,作为一种编程模式,它出现在……1976年,比js还要古老得多.promise全称是 Futures and promises.具体的可以参见 http://en ...

  9. L178 smart meter watchdog

    There is "no realistic prospect" of the government meeting its own deadline to install sma ...

  10. L177 Arctic ice brings an understanding of ancient Europe’s economy

    Greenland's icy mountains are not an obvious place to search for an archive of economic history, but ...