office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本區別及對比

2017-10-16 08:00:00
monkey_me
轉貼
3984

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對像可以生成,不發生錯誤,但是服務器之間通信確存在問題,所以出現這種情況.如果這樣就不方便了,所以沒有選用它,而選用變通的方式.



分享
北京十一选五基本走势