版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、用VBA抓取網(wǎng)頁數(shù)據(jù)有不少方法,其中一種便是引用XMLHTT對象。在這里嘗試 為大家介紹一下這個(gè)對象的一些基本屬性和方法還有一些應(yīng)用示例。XMLHTT對象參考IXMLHTTPRequest 提供客戶端同 http 服務(wù)器通訊的協(xié)議示例以下示例建立一個(gè)XMLHTT對象,并向http服務(wù)器發(fā)出指定地址的請求,請求 返回XML的源文件(XML document),如果服務(wù)器不能連通,則返回錯(cuò)誤。Dim HttpReq As ObjectSet HttpReq = CreateObject("MSXML2.XMLHTTP.3.0")HttpReq.open "GET&qu
2、ot;, "http:/ ajaxServer.aspx", FalseHttpReq.sendMsgBox HttpReq.responseText說明:第一,二行可以用以下語句代替, 但前提是需要在對象里先引用 Microsoft XML,v2.6-6.0(msxml2.dll, msxml3.dll, msxml4.dll, msxml5.dll, msxml6.dll) 其中之一。Dim HttpReq As New MSXML2.XMLHTTP30備注客戶端可以通過XmlHttp對象(MSXML2.XMLHTTP.3.C向http服務(wù)器發(fā)送請求并 使用微軟 XML
3、文檔對象模型 Microsoft? XML Document Object Model (DOM) 處 理回應(yīng)。該對完全象集成了 Microsoft XMLCore Services (MSXML,) 支持直接發(fā)送請求, 并用 MSXMDO斶析響應(yīng)。由于集成了對 Extensible Stylesheet Language (XSL) 的支持,XMLHTT寸象組件提供一個(gè)很簡易的途徑向 HTTP服務(wù)器發(fā)送一個(gè)結(jié)構(gòu)化 查詢,并支持用多種形式有效顯示結(jié)果。通常的使用順序是,先用open方法,再用send方法發(fā)送請求,然后用 setRequestHeader 方法設(shè)置自定義頭信息,最后查看四種以不同
4、形式返回的響 應(yīng)結(jié)果。XMLHTT對象支持 Microsoft In ternet Explorer (IE) 5.0及以上版本,只要你的網(wǎng)頁瀏覽器指定一種語言進(jìn)行瀏覽。更詳細(xì)的信息請查看 Explorer 的幫助文件關(guān)于 "To specify another language for Web page content"的部份版本MSXML 2.0及以上版本先決條件如果不用 CreateObject 方法創(chuàng)建對象, 則需要先引用以下任意一個(gè)版本的文件 msxml3.dll, msxml2.lib (MSXML 3.0)msxml4.dll, msxml2.lib (MSX
5、ML 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.idlXMLHttp 成員屬性onreadystatechange *指定當(dāng) readyState 屬性改變時(shí)的事件處理句柄。 會觸發(fā)這個(gè)事件處理器只寫 . 每個(gè)狀態(tài)改變時(shí)都readyState返回當(dāng)前請求的狀態(tài),只讀 .responseBody將回應(yīng)信息正文以 unsigned byte 數(shù)組形式返回
6、. 只讀responseStream以 Ado Stream 對象的形式返回響應(yīng)信息。只讀responseText將響應(yīng)信息作為字符串返回 . 只讀responseXML將響應(yīng)信息格式化為 Xml Document 對象并返回,只讀status返回當(dāng)前請求的 http 狀態(tài)碼 . 只讀statusText返回當(dāng)前請求的響應(yīng)行狀態(tài),只讀*表示此屬性是W3C文檔對象模型的擴(kuò)展.在VBA中不能直接調(diào)用方法abort 取消當(dāng)前請求 getAllResponseHeaders 獲取響應(yīng)的所有 http 頭 getResponseHeader從響應(yīng)信息中獲取指定的 http 頭創(chuàng)建一個(gè)新的http請求,并
7、指定此請求的方法、 URL以及驗(yàn)證信息(用戶 open名/ 密碼 )sendsetRequestHeaderreadyState屬性發(fā)送請求到 http 服務(wù)器并接收回應(yīng) 單獨(dú)指定請求的某個(gè) http 頭返回XMLHTT請求的當(dāng)前狀態(tài)此屬性只讀,返回值為 4 字節(jié)的長整型(具體值請看備注)當(dāng)XMLHttp對象把一個(gè)HTTP請求發(fā)送到服務(wù)器時(shí)將經(jīng)歷若干種狀態(tài):一直等待直到請求被處理;然后,它才接收一個(gè)響應(yīng)。這樣以來,腳本才正確響應(yīng)各種狀態(tài) -XMLHttpRequest 對象擁有一個(gè)描述對象的當(dāng)前狀 態(tài)的 readyState 屬性。語法strValue = oXMLHttpRequest.re
8、adyState;示例Dim XmlHttp As ObjectSet XmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")XmlHttp.Open "GET", "http:/localhost/test.xml", TrueXmlHttp.sendIf XmlHttp.readyState = 4 ThenMsgBox "Done"End If備注此屬性只讀,狀態(tài)用長度為 4 的整型表示 (4-byte integer). 定義如下:0" 未初始化 " 狀
9、態(tài)。此時(shí),已經(jīng)創(chuàng)建一個(gè) XMLHttpRequest 對象,但是還沒有初始化(即還沒調(diào)用open 方法)。" 初始化 " 狀態(tài)。此時(shí),已經(jīng)調(diào)用 open 方法 , 并且 XMLHttpRequest 對象已經(jīng)準(zhǔn)備好把一個(gè)請求發(fā)送 1到服務(wù)器,但還沒調(diào)用 send 方法。"發(fā)送"狀態(tài)。此時(shí),已經(jīng)調(diào)用 send 方法,把一個(gè)請求發(fā)送到服務(wù)器端, 但是還沒有收到一個(gè)響應(yīng), 2即是當(dāng)前的狀態(tài)及 http 頭部信息未知。"正在接收”狀態(tài)。此時(shí),已經(jīng)接收到 HTTP響應(yīng)頭部信息,但是消息體部分還沒有完全接收結(jié)束,3 這時(shí)通過 responseBody 和
10、responseText 獲取部分?jǐn)?shù)據(jù)會出現(xiàn)錯(cuò)誤。4 數(shù)據(jù)接收完畢 , 此時(shí)可以通過通過 responseBody 和 responseText 獲取完整的回應(yīng)數(shù)據(jù)Note從 MSXML 3.0 開始,如果在數(shù)據(jù)還沒有加載完畢(例如,在加載狀態(tài)或交互式狀態(tài))前就讀取status屬性,則會返回一個(gè)錯(cuò)誤信息:"The data necessary to complete this operation is not yetavailable."版本MSXML 2.0 及以上版本responseBody 屬性以未解碼的二進(jìn)制數(shù)組形式返回HTTP服務(wù)器響應(yīng)數(shù)據(jù)語法strValue =
11、 oXMLHttpRequest.responseBody;示例Dim xmlhttp As New Msxml2.XMLHTTP50 xmlhttp.open "GET", "http:/localhost/test.xml", False xmlhttp.sendMsgBox UBound(xmlhttp.responseBody)備注返回值為Variant類型,只讀。XMLHTT的responseBody從服務(wù)器返回一個(gè)二 進(jìn)制數(shù)組,即一個(gè)類型為 VT_ARRAY | VT_UI1的安全數(shù)組(SAFEARRAY來表示返 回?cái)?shù)據(jù)的實(shí)體。 他包含了從服
12、務(wù)器返回的未經(jīng)解碼的二進(jìn)制數(shù)據(jù), 因此,基于請 求不同的服務(wù)器,最終 會顯示不同的二進(jìn)制編碼數(shù)據(jù) (UTF-8, UCS-2, UCS-4, Shift_JIS 等等) 。*VT_UI1:無符號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)換來解碼, 否則會發(fā)生亂碼。 如 以下程序會發(fā)生中文亂碼:Dim xmlhttp As New Msxml2.XMLHTTP50 xmlhttp.open "GET", "http:/localhost/test.
13、xml", False xmlhttp.sendMsgBox xmlhttp.responseBody以下為編碼轉(zhuǎn)換函數(shù):Function bytes2BSTR(arrBytes) ' 編碼轉(zhuǎn)換Dim strReturn As StringDim ThisCharCode As StringDim NextCharCode As StringDim i As LongstrReturn = "" arrBytes = CStr(arrBytes) For i = 1 To LenB(arrBytes)ThisCharCode = AscB(MidB(arr
14、Bytes, i, 1)If ThisCharCode < &H80 Then strReturn = strReturn & Chr(ThisCharCode) ElseNextCharCode = AscB(MidB(arrBytes, i + 1, 1) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode) i = i + 1 End IfNext i bytes2BSTR = strReturn End Function以下程序不會發(fā)生亂碼了:Dim
15、xmlhttp As New Msxml2.XMLHTTP50 xmlhttp.open "GET", "http:/localhost/test.xml", False xmlhttp.sendMsgBox bytes2BSTR(xmlhttp.responseBody)版本MSXML 2.0及以上版本responseStream 屬性以 Ado Stream 對象的形式返回響應(yīng)信息語法strValue = oXMLHttpRequest.responseStream;備注返回值為Variant類型,只讀。XMLHTT的responseStream從服
16、務(wù)器返回一數(shù) 據(jù)流入 stream (IStream )。該包含了從服務(wù)器返回的未經(jīng)解碼的二進(jìn)制數(shù)據(jù), 因此,基于請求不同的服務(wù)器, 最終會顯示不同的二進(jìn)制編碼數(shù)據(jù) (UTF- 8, UCS-2, UCS-4, Shift_JIS 等等 )。如果請求的網(wǎng)頁的數(shù)據(jù)編碼不是二進(jìn)制,則會發(fā)生亂 碼。版本MSXML 2.0及以上版本responseText 屬性以字符串形式返回響應(yīng)信息(即我們通常見到的網(wǎng)頁源文件)語法strValue = oXMLHttpRequest.responseText;示例Dim xmlhttp As New Msxml2.XMLHTTP30 xmlhttp.open &q
17、uot;GET", "http:/localhost/test.xml", Falsexmlhttp.sendMsgBox xmlhttp.responseText備注返回值為String類型,此屬性只讀。XMLHTT嘗試將響應(yīng)信息解碼為 Unicode字符串,XMLHTT默認(rèn)將響應(yīng)數(shù)據(jù)的編碼定為UTF-8,如果服務(wù)器返回的數(shù)據(jù)是匹配的 Unicode BOM(byte-order mark) 編碼,XMLHTT可以解碼任何 UCS-2 (big or little endian)或者UCS-4數(shù)據(jù)。注意,如果服務(wù)器返回的是xml文檔,此屬性并不處理 xml文檔中
18、的編碼聲明。你需要使用responseXML來處理。這個(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 及以上版本respo nseXML 屬性以Xml Document對象形式返回將響應(yīng)信息語法Set objDispatch = oXMLHttpRequest.respo nseXML示
19、例Dim xmlhttp As New Msxml2.XMLHTTP30xmlhttp.sendMsgBox xmlhttp.responseXML.xml備注此屬性只讀,將響應(yīng)信息格式化為Xml Document對象并返回。如果響應(yīng)數(shù)據(jù)不是有效的XML文檔,此屬性本身不返回XMLDOMParseErro,可以通過處理過的 DOMDocumen對象獲取錯(cuò)誤信息。此responseXML屬性用于當(dāng)接收到完整的 HTTP響應(yīng)時(shí)(readyState 為4)描述XML卩向應(yīng);如果響應(yīng)實(shí)體不是 有效的 xml 格式,則返回錯(cuò)誤。無論何時(shí),只要 readyState 值不為 4,那么該 response
20、XML 的值也會返回 null 。如果Content-Type頭部并不包含以下這些媒體類型之一:Content-Type頭部指定MIME媒體)類型為text/xml , application/xml 或以 +xml 結(jié)尾,例如, "application/rss+xml" ,那么 responseXML 的值為 null 。其實(shí),這個(gè) responseXML 屬性值是一個(gè)文檔接口類型的對象,用來描述被分析的文檔。如果文檔不能被分 析( 例如,如果文檔不是良構(gòu)的或不支持文檔相應(yīng)的字符編碼 ) ,那么 responseXML 的值將為 null版本MSXML 2.0 及以上版
21、本status返回當(dāng)前請求的 http 狀態(tài)碼,長整型,只讀語法lValue = oXMLHttpRequest.status;示例Dim xmlServerHttp As New Msxml2.ServerXMLHTTP30 xmlServerHttp.open "GET", "http:/localhost/books.xml", False xmlServerHttp.sendMsgBox xmlServerHttp.status返回值長整形標(biāo)準(zhǔn)http 狀態(tài)碼,定義如下:狀態(tài)碼描述100Continue101Switching protocols
22、200OK201Created202Accepted203Non-Authoritative Information204No Content205Reset Content206Partial Content300Multiple Choices301Moved Permanently302Found303See Other304Not Modified305Use Proxy307Temporary Redirect400Bad Request401Unauthorized402Payment Required403Forbidden404Not Found405Method Not Allowed406Not Acceptable407Proxy Authentication Required408Request Timeout409Conflict410Gone411Length Required412Precondition Failed413Request Entity Too Lar
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國智能馬桶市場銷售狀況與營銷趨勢預(yù)測報(bào)告
- 微課程設(shè)計(jì)與開發(fā)技術(shù)
- 2024-2030年中國無花果行業(yè)運(yùn)營狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2024-2030年中國無毒高效快速纖維球過濾器項(xiàng)目可行性研究報(bào)告
- 養(yǎng)老院服務(wù)質(zhì)量自查方案
- ic設(shè)計(jì)課程設(shè)計(jì)
- 我是歌手課程設(shè)計(jì)
- 2025神經(jīng)內(nèi)科護(hù)理工作計(jì)劃
- 2025九年級物理下學(xué)期教學(xué)工作計(jì)劃
- 名企參考:比亞迪組織結(jié)構(gòu)及部門職責(zé)
- 2023年江蘇常州中考滿分作文《方寸之間天地大》4
- 2023年法律職業(yè)資格《主觀題》真題及答案
- 2024年初三數(shù)學(xué)競賽考試試題
- 房地產(chǎn)營銷工作排期【倒排計(jì)劃表】
- 某大學(xué)中西醫(yī)臨床(專升本)學(xué)士學(xué)位考試復(fù)習(xí)題
- CMOS數(shù)字集成電路智慧樹知到期末考試答案章節(jié)答案2024年寧波大學(xué)
- QB∕T 4728-2014 封閉式魚線輪
- 考前減壓班會課件
- 福建省三明市三元區(qū)2022-2023學(xué)年八年級上學(xué)期期末物理試卷(滬科版)
- 2024年廣東高校招收中職畢業(yè)生考試數(shù)學(xué)試卷真題(含答案解析)
- 2024版《保密法》培訓(xùn)課件
評論
0/150
提交評論