用Msxml2.XMLHTTP 与 Msxml2.ServerXMLHTTP 发生网页请求
发送 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 发生网页请求的更多相关文章
- nvmw install 失败. 需修改"Msxml2.XMLHTTP"为"Msxml2.ServerXMLHTTP"
准备在windows下学习nodejs. 下载了nvmw . 但没法安装node的任何版本. 都是报错如下: C:\Users\WXG>nvmw install v0.12.0 x86 Star ...
- MSXML2.XMLHTTP.4.0对象
一.使用步骤:1.创建XMLHTTP对象 //需MSXML4.0支持2.打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等.客户端通过Open命令打开与服务端的服务网页的连接.与 ...
- 使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息
ARP欺骗的作用 当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧 当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一 ...
- python网页请求urllib2模块简单封装代码
这篇文章主要分享一个python网页请求模块urllib2模块的简单封装代码. 原文转自:http://www.jbxue.com/article/16585.html 对python网页请求模块ur ...
- 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求
第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...
- 如何使用IE9浏览器自带开发人员工具捕获网页请求
我们在通过浏览器访问一个网页的时候,有时候会遇到页面不能正常显示,图片不能正常加载的问题. 如果我们需要知道浏览器打开该网页时,网页中每个元素的加载情况.这时,我们便可以借助浏览器自带开发人员工具,来 ...
- HTTP网页请求状态码
我们平时在打开一些网页的时候,会遇到打不开的情况,页面提示404错误,这个404就是http状态码.如果我们可以正常打开网页,这时也会有http状态码的,这个状态码就是200,只不过这时我们是无法通过 ...
- 只要发生ajax请求时加载旋转的按钮
定义一个变量 全局 c 只要发生ajax时给c++ 当ajax请求success或者error时,c--; 对加载的按钮添加个事件 监听 c 如果c得值没变化 则隐藏按钮 如果变化了则显示 ...
- 防止用户重发发生ajax请求
1.前端限制 点击提交后,将该元素禁用,等待请求结束后再次释放(解除禁用). 可以使用ajax中的 success 请求成功后的回调函数进行按钮释放. 2.防抖动 暴力连续点击按钮,可以通过闭包里的 ...
随机推荐
- 校验基于EO的VO中的字段是否发生变化
I have a table region and there are multiple records fetching from a Entity based VO. Now I have upd ...
- [Python开发工具] Pycharm之快捷键
[Python开发工具] Pycharm之快捷键 1 全局搜索: Ctrl+Shift+F,不过PyCharm的更强大, 你可以点选左侧某个目录后再按Ctrl+Shift+F, 这样默认会搜索改目录; ...
- bzoj4811
题解: 对于每一个节点,我们建立v0,v1 v0表示0进过会怎么样 v1表示1进过会怎么样 然后线段树合并 代码: #include <cstdio> #include <cstri ...
- 第12课:HTML+CSS的基础用法
1. html之head部分的常用标签的使用 <!--指定html是标准的html还是其它的html--> <!DOCTYPE html> <html lang=&quo ...
- 网络编程I/O函数介绍
read和write #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(in ...
- 接口测试HttpClient实践20150925
用了工具做接口测试,但是对于加密数据和结果的比对,以及批量数据读取,回头还是觉得代码来更方便灵活,从excle中读取数据,构成参数,发请求,并获取返回结果和预期值比较,并将结果输出程报告,可以深入做成 ...
- 伴随我整十个年头的校内网,现名 人人网, 是不是要shut down 了
如题: 每天我都习惯性的登录人人网,虽然现在基本上已经看不到曾经的同学上线了,不过我还是有事没事的往上面post 一些出行的照片,没事无聊的时候上这个网上看看自己曾经的照片,虽然已经无人在线,但是自己 ...
- UVAlive5713 Qin Shi Huang's National Road System【次小生成树】【DP】
LINK1 LINK2 题目大意 给你平面上的n个点 每个点有一个权值 让你求出一个生成树 可以选择一条边不花费代价 要最大化这条边两边端点的权值/剩下n-2条边的长度之和 思路 发现发现其实端点权值 ...
- 复利计算5.0(改成Java版本)与 单元测试
//由于C语言版本不方便单元测试,所以改成了java版本,部分代码如下:import java.util.Scanner; public class FuLi{ public static void ...
- 使用bit管理npm包
npm 包给共享,团队写作有好多问题需要解决,类似的解决方案有lerna yarn 使用monorepo,bit 官方有相关的比较 以下只说明如何进行简单的项目使用 网站 https://bitsrc ...