国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
淺談XMLHTTP對(duì)象(屬性和方法)-VBA抓取網(wǎng)頁(yè)數(shù)據(jù)1
用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
說明:第一,二行可以用以下語(yǔ)句代替,但前提是需要在對(duì)象里先引用Microsoft XML,v2.6-6.0(msxml2.dll, msxml3.dll, msxml4.dll, msxml5.dll, msxml6.dll)其中之一。
Dim HttpReq As New MSXML2.XMLHTTP30
備注
客戶端可以通過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)信息正文以u(píng)nsigned 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í)通過responseBody和responseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤。
4
數(shù)據(jù)接收完畢,此時(shí)可以通過通過responseBody和responseText獲取完整的回應(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、1或2時(shí),responseText包含一個(gè)空字符串。當(dāng)readyState值為3(正在接收)時(shí),響應(yīng)中包含客戶端還未完成的響應(yīng)信息。當(dāng)readyState為4(已加載)時(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,可以通過處理過的DOMDocument對(duì)象獲取錯(cuò)誤信息。
 
此responseXML屬性用于當(dāng)接收到完整的HTTP響應(yīng)時(shí)(readyState為4)描述XML響應(yīng);如果響應(yīng)實(shí)體不是有效的xml格式,則返回錯(cuò)誤。無(wú)論何時(shí),只要readyState值不為4,那么該responseXML的值也會(huì)返回null。
 
如果Content-Type頭部并不包含以下這些媒體類型之一:Content-Type頭部指定MIME(媒體)類型為text/xml,application/xml或以+xml結(jié)尾,例如,"application/rss+xml",那么responseXML的值為null。
 
其實(shí),這個(gè)responseXML屬性值是一個(gè)文檔接口類型的對(duì)象,用來(lái)描述被分析的文檔。如果文檔不能被分析(例如,如果文檔不是良構(gòu)的或不支持文檔相應(yīng)的字符編碼),那么responseXML的值將為null。
版本
MSXML 2.0及以上版本
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
XMLHTTP對(duì)象參考
XMLHTTPRequest的方法和屬性介紹
【XMLHTTPRequest屬性及方法詳解教程】,XMLHTTPRequest屬性及方法...
完全了解AJAX
XMLHTTP的簡(jiǎn)單講解及相關(guān)概念的介紹
XMLHttpRequest對(duì)象的屬性和方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服