发送 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. IOS-网络(发送JSON数据给服务器和多值参数)

    三步走: 1.使用POST请求 2.设置请求头 [request setValue:@"application/json" forHTTPHeaderField:@"Co ...

  2. 终于知道为什么我的mysql总是卸载的不干净以及老是找不到my.ini文件

    感谢博主: http://blog.sina.com.cn/s/blog_6fc5bfa90100qmr9.html 如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载 ...

  3. 利用Pandoc将markdown文件转化为pdf

    利用Pandoc将markdown文件转化为pdf 准备工作 安装pandoc 安装MiKTeX 将markdown文件转换为pdf 准备工作 安装pandoc Windows下安装pandoc很容易 ...

  4. Alpha阶段第1周/共2周 Scrum立会报告+燃尽图 03

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

  5. threading模块创建线程

    什么是线程 (thread) 线程也是一种多任务编程方式,可以使用计算机的多核资源.线程被称为轻量级的进程. 线程特征 *线程计算机多核分配的最小单位 *一个进程可以包含多个线程 *线程也是一个运行的 ...

  6. BZOJ3207: 花神的嘲讽计划Ⅰ(hash)

    3207: 花神的嘲讽计划Ⅰ Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3569  Solved: 1258[Submit][Status][Di ...

  7. 20155230 2016-2017-2 《Java程序设计》第八周学习总结

    20155230 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger ...

  8. test20181029 数列

    题意 分析 考场做法 打表发现,最后的循环节一定是\(\gcd(a_1,a_2),\gcd(a_1,a_2),0\)这种形式,而稍微思考一下便知道这显然是一般情况. 然后都有gcd了,发现操作的实质都 ...

  9. 无线路由器的加密模式WEP,WPA-PSK(TKIP),WPA2-PSK(AES) WPA-PSK(TKIP)+WPA2-PSK(AES)。

    目前无线路由器里带有的加密模式主要有:WEP,WPA-PSK(TKIP),WPA2-PSK(AES)和WPA-PSK(TKIP)+WPA2-PSK(AES). WEP(有线等效加密)WEP是Wired ...

  10. macOS --- 配置基于域名的虚拟主机

    在终端运行 sudo vi /Applications/XAMPP/xamppfiles/etc/httpd.conf,打开apache配置文件. 在httpd.conf中找到"#Inclu ...