office交流網(wǎng)--QQ交流群號及微信交流群

Access培訓(xùn)群:792054000         Excel免費(fèi)交流群群:686050929          Outlook交流群:221378704    

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

微信交流群(請用微信掃碼)

        

wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本區(qū)別及對比

2017-10-16 08:00:00
monkey_me
轉(zhuǎn)貼
9547

Access或Excel VBA要對網(wǎng)頁操作,必須要使用http,就要使用以下4種對象。

wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本區(qū)別

一、標(biāo)準(zhǔn)API接口WinINet(Microsoft Windows Internet)和WinHTTP(Microsoft Windows HTTP)

實(shí)現(xiàn)Http訪問,微軟提供了二套API:WinINet, WinHTTP(分別封裝于system32目錄下的wininet.dll和winhttp.dll內(nèi))二者主要區(qū)別在于后者更為安全和穩(wěn)定,可以說WinHTTP是WinINet的升級版

二、COM對象XMLHttpRequest和WinHttpRequest和ServerXMLHTTPRequest

XMLHttpRequest是基于WinInet封裝的,而WinHttpRequest和ServerXMLHTTPRequest則是基于WinHTTP封裝的所以三者的穩(wěn)定性屬XMLHttpRequest為最差封裝成COM形式主要是為了方便js vbs等腳本的調(diào)用,還具有易書寫、降低開發(fā)難度等許多特點(diǎn)把

三、對象版本和封裝位置

1、XMLHttpRequest對象版本和對應(yīng)的封裝dll文件

Microsoft.XMLHTTP 對應(yīng) msxml.dll

MSXML2.XMLHTTP 對應(yīng) msxml2.dll

MSXML2.XMLHTTP.3.0 對應(yīng) msxml3.dll

MSXML2.XMLHTTP.4.0 對應(yīng) msxml4.dll

MSXML2.XMLHTTP.5.0 對應(yīng) msxml5.dll(此版本是伴隨office2007發(fā)布的,所以目錄下可能找不到該版本的dll)

MSXML2.XMLHTTP.6.0 對應(yīng) msxml6.dll

如上各個dll的發(fā)布一般都是以補(bǔ)丁的形式發(fā)布,win7默認(rèn)都集成了吧

2、ServerXMLHTTP對象版本和對應(yīng)的封裝dll文件

Msxml2.ServerXMLHTTP 對應(yīng) msxml2.dll(win7自帶,下同!)

Msxml2.ServerXMLHTTP.3.0 對應(yīng) msxml3.dll

Msxml2.ServerXMLHTTP.4.0 對應(yīng) msxml4.dll

Msxml2.ServerXMLHTTP.5.0 對應(yīng) msxml5.dll

Msxml2.ServerXMLHTTP.6.0 對應(yīng) msxml6.dll

3、WinHttpRequest對象WinHttp.WinHttpRequest.5.1 對應(yīng) Winhttp.dll

(如上高版本的通常穩(wěn)定性會好一點(diǎn))

四、對象成員(屬性、方法、事件等),主要優(yōu)缺點(diǎn)

XMLRequest成員參考缺點(diǎn):和瀏覽器掛鉤,大多情況下會共享cookies,session,不支持單獨(dú)設(shè)置代理優(yōu)點(diǎn):和瀏覽器掛鉤,大多情況下會共享cookies,session

ServerXMLHTTP成員參考缺點(diǎn):系統(tǒng)沒有對應(yīng)dll的情況下程序需要外gua一個dll文件優(yōu)點(diǎn):脫離瀏覽器,使用代理方便

WinHttpRequest成員參考缺點(diǎn):暫無優(yōu)點(diǎn):脫離瀏覽器,使用代理方便

五、總結(jié)

如果你對WinInet或Winhttp比較熟悉的話當(dāng)然推薦直接使用標(biāo)準(zhǔn)接口,但同樣要付出的代價就是書寫更多的代碼,記住更多的參數(shù)就個人開發(fā)經(jīng)驗(yàn)而言還是推薦大家使用WinHttpRequest對象,微軟封裝的COM還是很優(yōu)秀的,應(yīng)該足以應(yīng)付大多數(shù)要求了



你的目標(biāo)地址應(yīng)該是https的吧。用下面的代碼試試:

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

ServerXMLHTTP與XMLHTTP區(qū)別和介紹


本文回答有關(guān) ServerXMLHTTP 對象的一些常見問題。
更多信息
1. 什么是 ServerXMLHTTP?


ServerXMLHTTP 為不同 Web 服務(wù)器之間的服務(wù)器安全 HTTP 訪問提供方法和屬性。您可以使用此對象在不同的 Web 服務(wù)器之間交換 XML 數(shù)據(jù)。



2. 如何安裝 ServerXMLHTTP?


ServerXMLHTTP 隨 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以從以下 Microsoft Developer Network (MSDN) 網(wǎng)站下載并安裝 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 的計算機(jī)上或者在安裝帶 Microsoft Internet Explorer 5.01(或更高版本)的 Microsoft Windows NT 4.0 的計算機(jī)上提供。它在其他平臺(如 Microsoft Windows 95 和 Microsoft Windows 98)上將失敗。


由于 XMLHTTP 內(nèi)部使用 WinInet,所以不支持在服務(wù)器端應(yīng)用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的組件,或 Windows 服務(wù)中使用 XMLHTTP。 有關(guān)其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應(yīng)的文章:
238425 (http://support.microsoft.com/kb/238425/) 不支持在服務(wù)中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之間的區(qū)別是什么?


XMLHTTP 為客戶端應(yīng)用程序而設(shè)計,并依賴于基于 Microsoft Win32 Internet (WinInet) 而構(gòu)建的 URLMon。ServerXMLHTTP 為服務(wù)器應(yīng)用程序而設(shè)計,并依賴于新的 HTTP 客戶端堆棧 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服務(wù)器安全的。有關(guān)更多信息,請參見 MSXML 軟件開發(fā)工具包 (SDK) 文檔。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之間做出選擇?


正如其名稱所示,ServerXMLHTTP 推薦用于服務(wù)器應(yīng)用程序,而 XMLHTTP 推薦用于客戶端應(yīng)用程序。XMLHTTP 具有一些優(yōu)點(diǎn),如支持緩存和自動發(fā)現(xiàn)代理。它可以在 Windows 95 和 Windows 98 平臺上使用,并且非常適合單用戶桌面應(yīng)用程序。



6. 什么是代理配置實(shí)用工具?


WinHTTP 代理配置實(shí)用工具 Proxycfg.exe 允許將 WinHTTP 配置為通過代理服務(wù)器訪問 HTTP 和 HTTPS 服務(wù)器。由于 ServerXMLHTTP 組件依賴于 WinHTTP 代理設(shè)置,因此在部署和安裝使用 WinHTTP 的應(yīng)用程序的過程中,管理員可以使用 Proxycfg.exe 實(shí)用工具。有關(guān)更多信息,請參見下面的 Microsoft 知識庫文章:
289481 (http://support.microsoft.com/kb/289481/) 可能需要運(yùn)行 Proxycfg 工具以使 ServerXMLHTTP 正常工作
7. ServerXMLHTTP 是否支持 SSL 和數(shù)字證書?


ServerXMLHTTP 和 XMLHTTP 組件在 MSXML3 中對 HTTPS 的支持比較有限。具體說就是,它們不完全支持用于身份驗(yàn)證的安全套接字層 (SSL) 證書。這些組件雖然支持 HTTPS 協(xié)議,但如果服務(wù)器要求客戶端證書,請求將會失敗。


ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 證書支持。



8. ServerXMLHTTP 有什么優(yōu)點(diǎn)? ? 通過使用 ServerXMLHTTP,可以在本地和遠(yuǎn)程系統(tǒng)之間以流或 XML 文檔的形式交換 XML 數(shù)據(jù)。
? 由于基礎(chǔ)協(xié)議為 HTTP 或 HTTPS,因此可以在防火墻后的系統(tǒng)之間交換數(shù)據(jù)。
? ServerXMLHTTP 可用于從不同的環(huán)境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)發(fā)送 HTTP 請求。

9. ServerXMLHTTP 存在什么限制?


可同時存在于單一進(jìn)程中的 ServerXMLHTTP 實(shí)例數(shù)主要取決于可用于系統(tǒng)上應(yīng)用程序的內(nèi)存大小。但是,其他因素(如 CPU 處理能力或者可用的套接字連接)會進(jìn)一步限制可以同時處于活動狀態(tài)的實(shí)例數(shù)。


就 MSXML 3.0 而言,可同時存在于單一進(jìn)程中的最大實(shí)例數(shù)為 5,460。



10. 在哪里可以找到有關(guān) ServerXMLHTTP 的更多信息?


本文的大部分信息都取自 MSXML SDK,它可以從以下 MSDN 網(wǎng)站的 XML 部分下載:
http://msdn.microsoft.com/xml/default.asp (http://msdn.microsoft.com/xml/default.asp)
此站點(diǎn)提供關(guān)于 MSXML 技術(shù)的最新信息。




1.ServerXmlHttp

定義:ServerXMLHTTP 為不同 Web 服務(wù)器之間的服務(wù)器安全 HTTP 訪問提供方法和屬性。您可以使用此對象在不同的 Web 服務(wù)器之間交換 XML 數(shù)據(jù)。

被Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供,并且不支持windows95和windows98環(huán)境,支持windows2000,安裝ie5的windows NT,windows2003以上版本,windows xp,vista等等系統(tǒng)。顧名思義他是使用在server端的組建。

SSL支持:

ServerXMLHTTP 組件在 MSXML3 中對 HTTPS 的支持比較有限。具體說就是,它們不完全支持用于身份驗(yàn)證的安全套接字層 (SSL) 證書。這些組件雖然支持 HTTPS 協(xié)議,但如果服務(wù)器要求客戶端證書,請求將會失敗。
ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 證書支持。

優(yōu)點(diǎn):

通過使用 ServerXMLHTTP,可以在本地和遠(yuǎn)程系統(tǒng)之間以流或 XML 文檔的形式交換 XML 數(shù)據(jù);由于基礎(chǔ)協(xié)議為 HTTP 或 HTTPS,因此可以在防火墻后的系統(tǒng)之間交換數(shù)據(jù);ServerXMLHTTP 可用于從不同的環(huán)境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)發(fā)送 HTTP 請求。

缺陷:

同時存在于單一進(jìn)程中的 ServerXMLHTTP 實(shí)例數(shù)主要取決于可用于系統(tǒng)上應(yīng)用程序的內(nèi)存大小。但是其他因素(如 CPU 處理能力或者可用的套接字連接)會進(jìn)一步限制可以同時處于活動狀態(tài)的實(shí)例數(shù)。就MSXML 3.0 而言,可同時存在于單一進(jìn)程中的最大實(shí)例數(shù)為5460。

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

如果你的目標(biāo)url實(shí)際上不存在,使用瀏覽器訪問的時候會發(fā)生“找不到服務(wù)器或是發(fā)生dns錯誤”那么使用serverxmlhttp訪問的時候可能會遇到長時間得不到response。

解決方案--設(shè)置超時時間

resolveTimeout = 10000   ‘ 解析DNS名字的超時時間,10秒

connectTimeout = 10000    ‘ 建立Winsock連接的超時時間,10秒

sendTimeout = 120000     ‘ 發(fā)送數(shù)據(jù)的超時時間,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     ' 發(fā)送數(shù)據(jù)的超時時間,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相對應(yīng)他是使用在client端的組建,由于 XMLHTTP 內(nèi)部使用 WinInet,所以不支持在服務(wù)器端應(yīng)用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的組件,或 Windows 服務(wù)中使用 XMLHTTP。

優(yōu)點(diǎn):

XMLHTTP 具有一些優(yōu)點(diǎn),如支持緩存和自動發(fā)現(xiàn)代理。它可以在 Windows 95 和 Windows 98 平臺上使用,并且非常適合單用戶桌面應(yīng)用程序。

支持SSL:

XMLHTTP 組件在 MSXML3 中對 HTTPS 的支持比較有限。具體說就是,它們不完全支持用于身份驗(yàn)證的安全套接字層 (SSL) 證書。這些組件雖然支持 HTTPS 協(xié)議,但如果服務(wù)器要求客戶端證書,請求將會失敗。

3.ServerXmlHttp和XmlHttp的區(qū)別

XMLHTTP 為客戶端應(yīng)用程序而設(shè)計,并依賴于基于 Microsoft Win32 Internet (WinInet) 而構(gòu)建的 URLMon。ServerXMLHTTP 為服務(wù)器應(yīng)用程序而設(shè)計,并依賴于新的 HTTP 客戶端堆棧 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服務(wù)器安全的。

轉(zhuǎn)載地址:http://blog.sina.com.cn/s/blog_5067ef490101hm61.html
發(fā)布一個自己寫的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
不建議使用,奶奶級的老到快沒牙了,當(dāng)然你簡單地請求一下響應(yīng)一個源代碼,用倒也無所謂.
Msxml2.XMLHTTP
這個是在Microsoft.XMLHTTP之后發(fā)布的,所以穩(wěn)定性要比好很多,所以叫Msxml2 =Microsoft XML 2
以上二個是和IE同內(nèi)核的,他們的COOKIE和緩存是和IE共用的,要是你能解決跨域問題,用IE登錄某站后,再用他們登錄也會是登錄狀態(tài)的.所以他們和IE一樣是有本地緩存的,同一網(wǎng)頁緩存未過期,請求過一次再次請求會很快.因?yàn)檫@時是直接讀取了緩存數(shù)據(jù).這也是為什么有些人用這個組件發(fā)生,網(wǎng)頁數(shù)據(jù)已刷新,運(yùn)行代碼卻更新不及時的原因.
WinHttp.WinHttpRequest.5.1
微軟基于服務(wù)器數(shù)據(jù)交流發(fā)布的組件,是獨(dú)立于IE的,也是沒有本地緩存的,所以會比上面二者慢.
但他卻比上面二者都要新也更強(qiáng)壯一點(diǎn),強(qiáng)壯也是相對性的.總是都是較老的組件了,而且這個組件有Option選項設(shè)置.功能更強(qiáng)大點(diǎn),可以發(fā)送COOKIE.
注意還有個MSXML2.ServerXMLHTTP,也是基于服務(wù)器的,不過在VB VBA中同樣可以引用,使用方法和WinHttp.WinHttpRequest.5.1類似


xmlHttp.open("GET",requestUrl,false);第三個參數(shù)true 和false的詳細(xì)區(qū)別是什么?

false就是等待有返回數(shù)據(jù)的時候再繼續(xù)往下走,還沒有得到數(shù)據(jù)的時候就會卡在那里,直到獲取數(shù)據(jù)為止。

true就是不等待,直接返回,這就是所謂的異步獲取數(shù)據(jù)


到msdn上面去看了一下,可能的原因是serverxmlhttp服務(wù)器之后通信是要一種信認(rèn)機(jī)制的,而我的個人電腦上沒有配置代理,所以serverxmlhttp對像可以生成,不發(fā)生錯誤,但是服務(wù)器之間通信確存在問題,所以出現(xiàn)這種情況.如果這樣就不方便了,所以沒有選用它,而選用變通的方式.



分享
文章分類
聯(lián)系我們
聯(lián)系人: 王先生
Email: 18449932@qq.com
QQ: 18449932
微博: officecn01
移動訪問