久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

淺談XMLHTTP對(duì)象(屬性和方法)-VBA抓取網(wǎng)頁(yè)數(shù)據(jù)1

 zele 2010-11-28
VBA抓取網(wǎng)頁(yè)數(shù)據(jù)有不少方法,,其中一種便是引用XMLHTTP對(duì)象,。在這里嘗試為大家介紹一下這個(gè)對(duì)象的一些基本屬性和方法還有一些應(yīng)用示例。

XMLHTTP對(duì)象參考

IXMLHTTPRequest
提供客戶端同http服務(wù)器通訊的協(xié)議

示例

以下示例建立一個(gè)XMLHTTP對(duì)象,,并向http服務(wù)器發(fā)出指定地址的請(qǐng)求,,請(qǐng)求返回XML的源文件(XML document),如果服務(wù)器不能連通,,則返回錯(cuò)誤,。

Dim HttpReq As Object
Set HttpReq = CreateObject("MSXML2.XMLHTTP.3.0")
HttpReq.open "GET", "http:// ajaxServer.aspx", False
HttpReq.send
MsgBox HttpReq.responseText


說(shuō)明:第一,二行可以用以下語(yǔ)句代替,,但前提是需要在對(duì)象里先引用Microsoft XML,v2.6-6.0(msxml2.dll, msxml3.dll, msxml4.dll, msxml5.dll, msxml6.dll)其中之一,。

Dim HttpReq As New MSXML2.XMLHTTP30

備注

客戶端可以通過(guò)XmlHttp對(duì)象(MSXML2.XMLHTTP.3.0)向http服務(wù)器發(fā)送請(qǐng)求并使用微軟XML文檔對(duì)象模型Microsoft® XML Document Object Model (DOM)處理回應(yīng)。
該對(duì)完全象集成了Microsoft XML Core Services (MSXML),,支持直接發(fā)送請(qǐng)求,,并用MSXML DOM分析響應(yīng)。由于集成了對(duì)Extensible Stylesheet Language (XSL)的支持,,XMLHTT對(duì)象組件提供一個(gè)很簡(jiǎn)易的途徑向HTTP服務(wù)器發(fā)送一個(gè)結(jié)構(gòu)化查詢,,并支持用多種形式有效顯示結(jié)果。
通常的使用順序是,,先用open 方法,再用send方法發(fā)送請(qǐng)求,,然后用setRequestHeader方法設(shè)置定義頭信息,,最后查看四種以不同形式返回的響應(yīng)結(jié)果。
XMLHTTP對(duì)象支持Microsoft Internet Explorer (IE) 5.0 及以上版本,,只要你的網(wǎng)頁(yè)瀏覽器指定一種語(yǔ)言進(jìn)行瀏覽,。更詳細(xì)的信息請(qǐng)查看Explorer的幫助文件關(guān)于"To specify another language for Web page content" 的部份。

版本

MSXML 2.0及以上版本

先決條件

如果不用CreateObject方法創(chuàng)建對(duì)象,,則需要先引用以下任意一個(gè)版本的文件:
msxml3.dll, msxml2.lib (MSXML 3.0)
msxml4.dll, msxml2.lib (MSXML 4.0)
msxml5.dll, msxml2.lib (MSXML 5.0 for Microsoft Office Applications)
msxml6.dll, msxml2.lib (MSXML 6.0)
Header and IDL files: msxml2.h, msxml2.idl

XMLHttp成員

屬性

onreadystatechange*

指定當(dāng)readyState屬性改變時(shí)的事件處理句柄,。只寫. 每個(gè)狀態(tài)改變時(shí)都會(huì)觸發(fā)這個(gè)事件處理器

readyState

返回當(dāng)前請(qǐng)求的狀態(tài),只讀.

responseBody

將回應(yīng)信息正文以unsigned byte數(shù)組形式返回.只讀

responseStream

Ado Stream對(duì)象的形式返回響應(yīng)信息,。只讀

responseText

將響應(yīng)信息作為字符串返回.只讀

responseXML

將響應(yīng)信息格式化為Xml Document對(duì)象并返回,,只讀

status

返回當(dāng)前請(qǐng)求的http狀態(tài)碼.只讀

statusText

返回當(dāng)前請(qǐng)求的響應(yīng)行狀態(tài),只讀


* 表示此屬性是W3C文檔對(duì)象模型的擴(kuò)展.VBA中不能直接調(diào)用


方法

abort

取消當(dāng)前請(qǐng)求

getAllResponseHeaders

獲取響應(yīng)的所有http

getResponseHeader

從響應(yīng)信息中獲取指定的http

open

創(chuàng)建一個(gè)新的http請(qǐng)求,,并指定此請(qǐng)求的方法,、URL以及驗(yàn)證信息(用戶名/密碼)

send

發(fā)送請(qǐng)求到http服務(wù)器并接收回應(yīng)

setRequestHeader

單獨(dú)指定請(qǐng)求的某個(gè)http

readyState屬性

返回XMLHTTP請(qǐng)求的當(dāng)前狀態(tài)

 

此屬性只讀,返回值為4字節(jié)的長(zhǎng)整型(具體值請(qǐng)看備注)

 

當(dāng)XMLHttp對(duì)象把一個(gè)HTTP請(qǐng)求發(fā)送到服務(wù)器時(shí)將經(jīng)歷若干種狀態(tài):一直等待直到請(qǐng)求被處理,;然后,,它才接收一個(gè)響應(yīng)。這樣以來(lái),,腳本才正確響應(yīng)各種狀態(tài)-XMLHttpRequest對(duì)象擁有一個(gè)描述對(duì)象的當(dāng)前狀態(tài)的readyState屬性,。


語(yǔ)法


Dim XmlHttp As Object
Set XmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")


XmlHttp.Open "GET", "http://localhost/test.xml", True

XmlHttp.send

If XmlHttp.readyState = 4 Then
       MsgBox "Done"

End If


備注

strValue = oXMLHttpRequest.readyState;


示例

此屬性只讀,,狀態(tài)用長(zhǎng)度為4的整型表示(4-byte integer).定義如下:


0

"未初始化"狀態(tài)。此時(shí),,已經(jīng)創(chuàng)建一個(gè)XMLHttpRequest對(duì)象,,但是還沒有初始化(即還沒調(diào)用open方法)。

1

"初始化"狀態(tài),。此時(shí),,已經(jīng)調(diào)用open方法,并且XMLHttpRequest對(duì)象已經(jīng)準(zhǔn)備好把一個(gè)請(qǐng)求發(fā)送到服務(wù)器,但還沒調(diào)用send方法,。

2

"發(fā)送"狀態(tài),。此時(shí),已經(jīng)調(diào)用send方法,,把一個(gè)請(qǐng)求發(fā)送到服務(wù)器端,,但是還沒有收到一個(gè)響應(yīng),即是當(dāng)前的狀態(tài)及http頭部信息未知,。

3

"正在接收"狀態(tài),。此時(shí),已經(jīng)接收到HTTP響應(yīng)頭部信息,,但是消息體部分還沒有完全接收結(jié)束,,這時(shí)通過(guò)responseBodyresponseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤。

4

數(shù)據(jù)接收完畢,此時(shí)可以通過(guò)通過(guò)responseBodyresponseText獲取完整的回應(yīng)數(shù)據(jù)


Note

MSXML 3.0開始,,如果在數(shù)據(jù)還沒有加載完畢(例如,,在加載狀態(tài)或交互式狀態(tài))前就讀取status 屬性,則會(huì)返回一個(gè)錯(cuò)誤信息:"The data necessary to complete this operation is not yet available."


版本

MSXML 2.0及以上版本

responseBody屬性

以未解碼的二進(jìn)制數(shù)組形式返回HTTP服務(wù)器響應(yīng)數(shù)據(jù),。

語(yǔ)法
strValue = oXMLHttpRequest.responseBody;


示例

Dim xmlhttp As New Msxml2.XMLHTTP50
xmlhttp.open "GET", "http://localhost/test.xml", False
xmlhttp.send
MsgBox UBound(xmlhttp.responseBody)


備注

返回值為Variant類型,,只讀。XMLHTTP的responseBody從服務(wù)器返回一個(gè)二進(jìn)制數(shù)組,,即一個(gè)類型為VT_ARRAY | VT_UI1*的安全數(shù)組(SAFEARRAY)來(lái)表示返回?cái)?shù)據(jù)的實(shí)體,。他包含了從服務(wù)器返回的未經(jīng)解碼的二進(jìn)制數(shù)據(jù),因此,,基于請(qǐng)求不同的服務(wù)器,,最終 會(huì)顯示不同的二進(jìn)制編碼數(shù)據(jù)(UTF-8, UCS-2, UCS-4, Shift_JIS等等)。

*VT_UI1:無(wú)符號(hào)1字節(jié)整數(shù)(BYTE)數(shù)組
當(dāng)Variant的數(shù)據(jù)類型為VT_ARRAY | VT_UI1時(shí),,返回一個(gè)SAFEARRAY安全數(shù)組

如果想返回解碼后的數(shù)據(jù)實(shí)體則需要進(jìn)行編碼轉(zhuǎn)換來(lái)解碼,,否則會(huì)發(fā)生亂碼。如以下程序會(huì)發(fā)生中文亂碼:

Dim xmlhttp As New Msxml2.XMLHTTP50
xmlhttp.open "GET", "http://localhost/test.xml", False
xmlhttp.send
MsgBox xmlhttp.responseBody

以下為編碼轉(zhuǎn)換函數(shù):

Function bytes2BSTR(arrBytes) '編碼轉(zhuǎn)換
Dim strReturn As String
Dim ThisCharCode As String
Dim NextCharCode As String
Dim i As Long

strReturn = ""
arrBytes = CStr(arrBytes)
For i = 1 To LenB(arrBytes)
ThisCharCode = AscB(MidB(arrBytes, i, 1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(arrBytes, i + 1, 1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next i
bytes2BSTR = strReturn
End Function


以下程序不會(huì)發(fā)生亂碼了:

Dim xmlhttp As New Msxml2.XMLHTTP50
xmlhttp.open "GET", "http://localhost/test.xml", False
xmlhttp.send
MsgBox bytes2BSTR(xmlhttp.responseBody)


版本

MSXML 2.0及以上版本

responseStream屬性

以Ado Stream對(duì)象的形式返回響應(yīng)信息

語(yǔ)法
strValue = oXMLHttpRequest.responseStream;

備注
返回值為Variant類型,,只讀,。XMLHTTP的responseStream從服務(wù)器返回一數(shù)據(jù)流入 stream(IStream)。該包含了從服務(wù)器返回的未經(jīng)解碼的二進(jìn)制數(shù)據(jù),,因此,,基于請(qǐng)求不同的服務(wù)器,,最終會(huì)顯示不同的二進(jìn)制編碼數(shù)據(jù)(UTF- 8, UCS-2, UCS-4, Shift_JIS等等)。如果請(qǐng)求的網(wǎng)頁(yè)的數(shù)據(jù)編碼不是二進(jìn)制,,則會(huì)發(fā)生亂碼,。

版本
MSXML 2.0及以上版本

responseText屬性

以字符串形式返回響應(yīng)信息(即我們通常見到的網(wǎng)頁(yè)源文件)


語(yǔ)法

strValue = oXMLHttpRequest.responseText;


示例

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/test.xml", False

xmlhttp.send

MsgBox xmlhttp.responseText


備注

返回值為String類型,此屬性只讀,。


XMLHTTP
嘗試將響應(yīng)信息解碼為Unicode字符串,,XMLHTTP默認(rèn)將響應(yīng)數(shù)據(jù)的編碼定為UTF-8,如果服務(wù)器返回的數(shù)據(jù)是匹配的Unicode BOM(byte-order mark)編碼,,XMLHTTP可以解碼任何UCS-2 (big or little endian)或者UCS-4 數(shù)據(jù),。注意,如果服務(wù)器返回的是xml文檔,,此屬性并不處理xml文檔中的編碼聲明,。你需要使用responseXML來(lái)處理。

 

這個(gè)responseText屬性包含客戶端接收到的HTTP響應(yīng)的文本內(nèi)容,。當(dāng)readyState值為0,、12時(shí),responseText包含一個(gè)空字符串,。當(dāng)readyState值為3(正在接收)時(shí),,響應(yīng)中包含客戶端還未完成的響應(yīng)信息。當(dāng)readyState4(已加載)時(shí),,該responseText包含完整的響應(yīng)信息,。



版本
MSXML 2.0及以上版本


responseXML屬性

Xml Document對(duì)象形式返回將響應(yīng)信息


語(yǔ)法

Set objDispatch = oXMLHttpRequest.responseXML


示例

Dim xmlhttp As New Msxml2.XMLHTTP30

xmlhttp.open "GET", "http://localhost/test.xml", False

xmlhttp.send

MsgBox xmlhttp.responseXML.xml


備注

此屬性只讀,將響應(yīng)信息格式化為Xml Document對(duì)象并返回,。如果響應(yīng)數(shù)據(jù)不是有效的XML文檔,此屬性本身不返回XMLDOMParseError,,可以通過(guò)處理過(guò)的DOMDocument對(duì)象獲取錯(cuò)誤信息,。

 

responseXML屬性用于當(dāng)接收到完整的HTTP響應(yīng)時(shí)(readyState4)描述XML響應(yīng);如果響應(yīng)實(shí)體不是有效的xml格式,,則返回錯(cuò)誤,。無(wú)論何時(shí),只要readyState值不為4,,那么該responseXML的值也會(huì)返回null,。

 

如果Content-Type頭部并不包含以下這些媒體類型之一:Content-Type頭部指定MIME(媒體)類型為text/xmlapplication/xml或以+xml結(jié)尾,,例如,,"application/rss+xml",那么responseXML的值為null,。

 

其實(shí),,這個(gè)responseXML屬性值是一個(gè)文檔接口類型的對(duì)象,,用來(lái)描述被分析的文檔。如果文檔不能被分析(例如,,如果文檔不是良構(gòu)的或不支持文檔相應(yīng)的字符編碼),,那么responseXML的值將為null



版本

MSXML 2.0
及以上版本

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多