wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本区别及对比

2017-10-16 08:00:00
monkey_me
转贴
492

Access或Excel VBA要对网页操作,必须要使用http,就要使用以下4种对象。

wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本区别

一、标准API接口WinINet(Microsoft Windows Internet)和WinHTTP(Microsoft Windows HTTP)

实现Http访问,微软提供了二套API:WinINet, WinHTTP(分别封装于system32目录下的wininet.dll和winhttp.dll内)二者主要区别在于后者更为安全和稳定,可以说WinHTTP是WinINet的升级版

二、COM对象XMLHttpRequest和WinHttpRequest和ServerXMLHTTPRequest

XMLHttpRequest是基于WinInet封装的,而WinHttpRequest和ServerXMLHTTPRequest则是基于WinHTTP封装的所以三者的稳定性属XMLHttpRequest为最差封装成COM形式主要是为了方便js vbs等脚本的调用,还具有易书写、降低开发难度等许多特点把

三、对象版本和封装位置

1、XMLHttpRequest对象版本和对应的封装dll文件

Microsoft.XMLHTTP 对应 msxml.dll

MSXML2.XMLHTTP 对应 msxml2.dll

MSXML2.XMLHTTP.3.0 对应 msxml3.dll

MSXML2.XMLHTTP.4.0 对应 msxml4.dll

MSXML2.XMLHTTP.5.0 对应 msxml5.dll(此版本是伴随office2007发布的,所以目录下可能找不到该版本的dll)

MSXML2.XMLHTTP.6.0 对应 msxml6.dll

如上各个dll的发布一般都是以补丁的形式发布,win7默认都集成了吧

2、ServerXMLHTTP对象版本和对应的封装dll文件

Msxml2.ServerXMLHTTP 对应 msxml2.dll(win7自带,下同!)

Msxml2.ServerXMLHTTP.3.0 对应 msxml3.dll

Msxml2.ServerXMLHTTP.4.0 对应 msxml4.dll

Msxml2.ServerXMLHTTP.5.0 对应 msxml5.dll

Msxml2.ServerXMLHTTP.6.0 对应 msxml6.dll

3、WinHttpRequest对象WinHttp.WinHttpRequest.5.1 对应 Winhttp.dll

(如上高版本的通常稳定性会好一点)

四、对象成员(属性、方法、事件等),主要优缺点

XMLRequest成员参考缺点:和浏览器挂钩,大多情况下会共享cookies,session,不支持单独设置代理优点:和浏览器挂钩,大多情况下会共享cookies,session

ServerXMLHTTP成员参考缺点:系统没有对应dll的情况下程序需要外gua一个dll文件优点:脱离浏览器,使用代理方便

WinHttpRequest成员参考缺点:暂无优点:脱离浏览器,使用代理方便

五、总结

如果你对WinInet或Winhttp比较熟悉的话当然推荐直接使用标准接口,但同样要付出的代价就是书写更多的代码,记住更多的参数就个人开发经验而言还是推荐大家使用WinHttpRequest对象,微软封装的COM还是很优秀的,应该足以应付大多数要求了



你的目标地址应该是https的吧。用下面的代码试试:

1
2
3
4
'...
set http = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
http.setOption(2) = 13056
'...

ServerXMLHTTP与XMLHTTP区别和介绍


本文回答有关 ServerXMLHTTP 对象的一些常见问题。
更多信息
1. 什么是 ServerXMLHTTP?


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



2. 如何安装 ServerXMLHTTP?


ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以从以下 Microsoft Developer Network (MSDN) 网站下载并安装 MSXML 3.0:
http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en (http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en)
3. ServerXMLHTTP 具有什么平台要求?


ServerXMLHTTP 支持仅在安装 Microsoft Windows 2000 的计算机上或者在安装带 Microsoft Internet Explorer 5.01(或更高版本)的 Microsoft Windows NT 4.0 的计算机上提供。它在其他平台(如 Microsoft Windows 95 和 Microsoft Windows 98)上将失败。


由于 XMLHTTP 内部使用 WinInet,所以不支持在服务器端应用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的组件,或 Windows 服务中使用 XMLHTTP。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
238425 (http://support.microsoft.com/kb/238425/) 不支持在服务中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之间的区别是什么?


XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之间做出选择?


正如其名称所示,ServerXMLHTTP 推荐用于服务器应用程序,而 XMLHTTP 推荐用于客户端应用程序。XMLHTTP 具有一些优点,如支持缓存和自动发现代理。它可以在 Windows 95 和 Windows 98 平台上使用,并且非常适合单用户桌面应用程序。



6. 什么是代理配置实用工具?


WinHTTP 代理配置实用工具 Proxycfg.exe 允许将 WinHTTP 配置为通过代理服务器访问 HTTP 和 HTTPS 服务器。由于 ServerXMLHTTP 组件依赖于 WinHTTP 代理设置,因此在部署和安装使用 WinHTTP 的应用程序的过程中,管理员可以使用 Proxycfg.exe 实用工具。有关更多信息,请参见下面的 Microsoft 知识库文章:
289481 (http://support.microsoft.com/kb/289481/) 可能需要运行 Proxycfg 工具以使 ServerXMLHTTP 正常工作
7. ServerXMLHTTP 是否支持 SSL 和数字证书?


ServerXMLHTTP 和 XMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。


ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 证书支持。



8. ServerXMLHTTP 有什么优点? ? 通过使用 ServerXMLHTTP,可以在本地和远程系统之间以流或 XML 文档的形式交换 XML 数据。
? 由于基础协议为 HTTP 或 HTTPS,因此可以在防火墙后的系统之间交换数据。
? ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP 请求。

9. ServerXMLHTTP 存在什么限制?


可同时存在于单一进程中的 ServerXMLHTTP 实例数主要取决于可用于系统上应用程序的内存大小。但是,其他因素(如 CPU 处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。


就 MSXML 3.0 而言,可同时存在于单一进程中的最大实例数为 5,460。



10. 在哪里可以找到有关 ServerXMLHTTP 的更多信息?


本文的大部分信息都取自 MSXML SDK,它可以从以下 MSDN 网站的 XML 部分下载:
http://msdn.microsoft.com/xml/default.asp (http://msdn.microsoft.com/xml/default.asp)
此站点提供关于 MSXML 技术的最新信息。




1.ServerXmlHttp

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

被Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供,并且不支持windows95和windows98环境,支持windows2000,安装ie5的windows NT,windows2003以上版本,windows xp,vista等等系统。顾名思义他是使用在server端的组建。

SSL支持:

ServerXMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。
ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 证书支持。

优点:

通过使用 ServerXMLHTTP,可以在本地和远程系统之间以流或 XML 文档的形式交换 XML 数据;由于基础协议为 HTTP 或 HTTPS,因此可以在防火墙后的系统之间交换数据;ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP 请求。

缺陷:

同时存在于单一进程中的 ServerXMLHTTP 实例数主要取决于可用于系统上应用程序的内存大小。但是其他因素(如 CPU 处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。就MSXML 3.0 而言,可同时存在于单一进程中的最大实例数为5460。

值得注意的特性----一小时超时:

如果你的目标url实际上不存在,使用浏览器访问的时候会发生“找不到服务器或是发生dns错误”那么使用serverxmlhttp访问的时候可能会遇到长时间得不到response。

解决方案--设置超时时间

resolveTimeout = 10000   ‘ 解析DNS名字的超时时间,10秒

connectTimeout = 10000    ‘ 建立Winsock连接的超时时间,10秒

sendTimeout = 120000     ‘ 发送数据的超时时间,120秒

receiveTimeout = 60000     ' 接收response的超时时间,60秒

xmlHttp.setTimeouts resolveTimeout, connectTimeout, sendTimeout, receiveTimeout

For Example:
BeginTimer = Timer()
BeiginTime = Now()
On error resume next
dim xmlHttp As ServerXmlHttp
Set xmlHttp = New  ServerXmlHttp
resolveTimeout = 10000   ' 解析DNS名字的超时时间,10秒
connectTimeout = 10000    ' 建立Winsock连接的超时时间,10秒
sendTimeout = 120000     ' 发送数据的超时时间,120秒
receiveTimeout = 60000     ' 接收response的超时时间,60秒
'xmlHttp.setTimeouts resolveTimeout, connectTimeout, sendTimeout,
receiveTimeout
uRL ="http://202.118.89.4:4090/2333.asp"
xmlHttp.Open "POST", sURL, False
xmlHttp.send "1212312"EndTimer = Timer()
TimeSpan_Send = EndTimer - BeginTimer

EndTime = Now()
msgbox  uRL & " okay!TimeSpan=" & CStr(TimeSpan_Send) & ";start:" & BeiginTime & ";EndTime:" & EndTime

2.XMLHttp

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

优点:

XMLHTTP 具有一些优点,如支持缓存和自动发现代理。它可以在 Windows 95 和 Windows 98 平台上使用,并且非常适合单用户桌面应用程序。

支持SSL:

XMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。

3.ServerXmlHttp和XmlHttp的区别

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

转载地址:http://blog.sina.com.cn/s/blog_5067ef490101hm61.html
发布一个自己写的ASP POST

Function   Post(url)
Dim  postData,textResponse
postData="user=xxxx&password=******"
Set ServerXmlHttp =Server.CreateObject("MSXML2.ServerXMLHTTP")
ServerXmlHttp.open "POST", url ,false
'ServerXmlHttp.setTimeouts 10000,10000,10000,30000
ServerXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ServerXmlHttp.send postData
If ServerXmlHttp.status = 200 Then
textResponse = ServerXmlHttp.responseText
Else
textResponse="0"
End If
Set ServerXmlHttp = Nothing

End Function




Microsoft.XMLHTTP
不建议使用,奶奶级的老到快没牙了,当然你简单地请求一下响应一个源代码,用倒也无所谓.
Msxml2.XMLHTTP
这个是在Microsoft.XMLHTTP之后发布的,所以稳定性要比好很多,所以叫Msxml2 =Microsoft XML 2
以上二个是和IE同内核的,他们的COOKIE和缓存是和IE共用的,要是你能解决跨域问题,用IE登录某站后,再用他们登录也会是登录状态的.所以他们和IE一样是有本地缓存的,同一网页缓存未过期,请求过一次再次请求会很快.因为这时是直接读取了缓存数据.这也是为什么有些人用这个组件发生,网页数据已刷新,运行代码却更新不及时的原因.
WinHttp.WinHttpRequest.5.1
微软基于服务器数据交流发布的组件,是独立于IE的,也是没有本地缓存的,所以会比上面二者慢.
但他却比上面二者都要新也更强壮一点,强壮也是相对性的.总是都是较老的组件了,而且这个组件有Option选项设置.功能更强大点,可以发送COOKIE.
注意还有个MSXML2.ServerXMLHTTP,也是基于服务器的,不过在VB VBA中同样可以引用,使用方法和WinHttp.WinHttpRequest.5.1类似


xmlHttp.open("GET",requestUrl,false);第三个参数true 和false的详细区别是什么?

false就是等待有返回数据的时候再继续往下走,还没有得到数据的时候就会卡在那里,直到获取数据为止。

true就是不等待,直接返回,这就是所谓的异步获取数据


到msdn上面去看了一下,可能的原因是serverxmlhttp服务器之后通信是要一种信认机制的,而我的个人电脑上没有配置代理,所以serverxmlhttp对像可以生成,不发生错误,但是服务器之间通信确存在问题,所以出现这种情况.如果这样就不方便了,所以没有选用它,而选用变通的方式.



分享