目錄
前言:vba 爬蟲相關(guān)xmlhttp的方法
1 什么是xmlhttp
1.1 定義
1.2 特點(diǎn)
1.3 創(chuàng)建xmlhttp對(duì)象的過程
1.4? XMLHTTP對(duì)象創(chuàng)建的幾種方法:
2 XMLHTTP方法:
2.1 xmlhttp.open(Method, Url, Async, User,Password)
2.1.1 xmlhttp.open()方法
2.1.2?參數(shù)?
2.1.3 xmlhttp.open(get, url)
2.1.4 xmlhttp.open(post, url)
2.1.5 xmlhttp.open(put )
2.1.6 xmlhttp.open(propfind?)
2.2 XmlHttp.send(varBody)
2.3 setRequestHeader(bstrHeader, bstrValue)
2.4 abort
2.5 getAllResponseHeaders
2.6 getResponseHeader("header")
2.7 這個(gè)??XMLHttpRequest.open()
2.8 XMLHttpRequest.send(varBody)
2.9 response.write(objXML.responseText)
3 XMLHTTP屬性:
3.1 xmlhttp的屬性羅列
?3.1 xml.http.readyState
3.2 onreadystatechange
3.3 xml.http.status
3.4?xml.http.statusText
3.5?responseBody:
3.6 XmlHttp.responsetext 即是網(wǎng)頁內(nèi)容
3.7 responseStream: ? ?
3.8 responseXML: ? ? ?
前言:vba 爬蟲相關(guān)xmlhttp的方法
- 除了EXCEL里直接用 來自網(wǎng)站可以爬數(shù)據(jù)
- VBA也可以寫爬蟲代碼
- 但是設(shè)計(jì) xmlhttp 相關(guān)的內(nèi)容
1 什么是xmlhttp
1.1 定義
- XMLHTTP是個(gè)傳送XML格式數(shù)據(jù)的超文本傳輸協(xié)議。
- XMLHTTP的數(shù)據(jù)傳輸過程更為靈活一些:
- 下面是網(wǎng)上說靈活的地方
- XMLHttpRequest可以提供不重新加載頁面的情況下更新網(wǎng)頁,在頁面加載后在客戶端向服務(wù)器請求數(shù)據(jù),在頁面加載后在服務(wù)器端接受數(shù)據(jù),在后臺(tái)向客戶端發(fā)送數(shù)據(jù)
- 它上傳的指令可以是XML格式數(shù)據(jù),也可以是字符串,流,或者一個(gè)無符號(hào)整數(shù)數(shù)組。還可以是URL的參數(shù)。
- 它下達(dá)的結(jié)果可以是XML格式數(shù)據(jù),也可以是字符串,流,或者一個(gè)無符號(hào)整數(shù)數(shù)組。
1.2 特點(diǎn)
- 也是跨語言的
- 現(xiàn)在所知的,vb,js
1.3 創(chuàng)建xmlhttp對(duì)象的過程
客戶端調(diào)用XMLHTTP的過程很簡單,只有5個(gè)步驟:?
- 創(chuàng)建XMLHTTP對(duì)象?
- 打開與服務(wù)端的連接,同時(shí)定義指令發(fā)送方式,服務(wù)網(wǎng)頁(URL)和請求權(quán)限等。?
- 客戶端通過Open命令打開與服務(wù)端的服務(wù)網(wǎng)頁的連接。與普通HTTP指令傳送一樣,可以用"GET"方法或"POST"方法指向服務(wù)端的服務(wù)網(wǎng)頁。?
- 發(fā)送指令。?
- 等待并接收服務(wù)端返回的處理結(jié)果。?
- 釋放XMLHTTP對(duì)象?
創(chuàng)建xmlhtml對(duì)象過程的例子:見下面代碼
Sub t1()
strUrl = "http://www.86pm25.com/paiming.htm"
getHtmlStr (strUrl)
End Sub
Public Function getHtmlStr(strUrl)
Dim XmlHttp
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", strUrl, True
XmlHttp.send
Content = XmlHttp.responsetext
ThisWorkbook.Sheets("sheet5").Cells(1, 1) = Content
' getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
' Set XmlHttp = Nothing
End Function
運(yùn)行結(jié)果
?
1.4? XMLHTTP對(duì)象創(chuàng)建的幾種方法:
VB相關(guān)的幾種對(duì)象創(chuàng)建方法
- Msxml2.XMLHTTP是高版本,受msxml3.dll+支持 ??
- Microsoft.XMLHTTP是低本,一般是msxml2.6以下版本使用
- dim objxml? as object
- Set objXML = CreateObject("Msxml2.XMLHTTP")?
- Set objXML = CreateObject("MSXML2.XMLHTTP.6.0")
- Set objXML = CreateObject("Microsoft.XMLHTTP")? ?
學(xué)習(xí)過程中,了解到創(chuàng)建xml對(duì)象有時(shí)候需要關(guān)注msxml的版本,比如安裝msxml4以上版本的xml解析器,比如有些人的代碼里寫法是
- msxml2.serverxmlhttp.4.0
- MSXML2.XMLHTTP.6.0
下面這些代碼先放這,以后看是不是用得著
Set http=Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
http.setOption(2) = 13056? ?'忽略所有ssl錯(cuò)誤
Set objXmlHttp= Server.CreateObject("WinHttp.WinHttpRequest.5.1")
objXmlHttp.option(9) = 2720
2 XMLHTTP方法:
- 百度百科上就有,學(xué)習(xí)一遍
Microsoft.XMLHTTP_百度百科含義Microsoft.XMLHttp組件的屬性方法https://baike.baidu.com/item/Microsoft.XMLHTTP/5265442?fr=aladdin
2.1 xmlhttp.open(Method, Url, Async, User,Password)
2.1.1 xmlhttp.open()方法
- open? 創(chuàng)建一個(gè)新的http請求,并指定此請求的方法、URL以及驗(yàn)證信息(用戶名/密碼) 去打開指定網(wǎng)址
- 語法
- xmlhttp.open(Method, Url, Async, User,Password)
- xmlhttp.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
- 調(diào)用open方法后,會(huì)將readyState修改為1。
2.1.2?參數(shù)?
bstrMethod
- 例如:POST、GET、PUT及PROPFIND。
- 大小寫不敏感?
- xmlhttp.post? ? 用"POST"方式發(fā)送數(shù)據(jù),可以大到4MB,
- xmlhttp.GET? ?只能256KB
- xmlhttp.PUT
- xmlhttp.PROPFIND
bstrUrl
- 請求的URL地址
- 可以為絕對(duì)地址也可以為相對(duì)地址。?
varAsync[可選]
- varAsync: 是否同步執(zhí)行。
- 布爾型,
- 指定此請求是否為異步方式?
- 默認(rèn)/ 缺省為True,即異步執(zhí)行,
- 如果寫 False,同步執(zhí)行,只能在DOM中實(shí)施同步執(zhí)行。
bstrUser[可選]
- 如果服務(wù)器需要驗(yàn)證,此處指定用戶名
- 如果未指定,當(dāng)服務(wù)器需要驗(yàn)證時(shí),會(huì)彈出驗(yàn)證窗口。?
bstrPassword[可選]
- 驗(yàn)證信息中的密碼部分,
- 如果用戶名為空,則此值將被忽略。?
2.1.3 xmlhttp.open(get, url)
- xmlhttp.open()
- 打開網(wǎng)頁,取得信息
? ? Dim XmlHttp
? ? Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
? ? XmlHttp.Open "GET", strUrl, True
? ? XmlHttp.send
2.1.4 xmlhttp.open(post, url)
- 如果Open方法定義為POST,可以定義表單方式上傳
- 還可以發(fā)送用戶名,密碼!
- 上傳信息是這樣
- XMLHTTP.setRequestHeader
- XMLHTTP.send
Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
XMLHTTP.Open "POST", StrUrl, True
XMLHTTP.setRequestHeader "Content-Length", Len(PostData)
XMLHTTP.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
XMLHTTP.send (StrData)?
set oxh=createobject("Microsoft.XMLHTTP")
postdata="username=abc&password=123"
oxh.Open "post",url,false
oxh.setRequestHeader "Content-Length",len(postdata)
oxh.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
oxh.send postdata? ? 'send用戶名密碼
Sub t2()
Dim xmlhttp
strUrl = "http://www.86pm25.com/paiming.htm"
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "POST", strUrl, True
xmlhttp.setRequestHeader "Content-Length", Len(postdata)
xmlhttp.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
xmlhttp.send (StrData)
Content = xmlhttp.responsetext
ThisWorkbook.Sheets("sheet5").Cells(1, 2) = Content
Set xmlhttp = Nothing
End Sub
Sub t3()
Dim xmlhttp
strUrl = "http://www.86pm25.com/paiming.htm"
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
postdata = "username=abc&password=123"
xmlhttp.Open "post", Url, False
xmlhttp.setRequestHeader "Content-Length", Len(postdata)
xmlhttp.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
xmlhttp.send postdata 'send用戶名密碼
Content = xmlhttp.responsetext
ThisWorkbook.Sheets("sheet5").Cells(1, 2) = Content
Set xmlhttp = Nothing
End Sub
2.1.5 xmlhttp.open(put )
- ?PUT創(chuàng)建或替換資源。因此,Content-Type頭字段應(yīng)該包含您要發(fā)送的表示的內(nèi)容類型
var string = encodeURIComponent("Text String!")
var req = new XMLHttpRequest()
req.open("PUT", "example/data.txt", false)
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
req.setRequestHeader("Content-length", string.length)
req.setRequestHeader("Connection", "close")
req.send(string)
2.1.6 xmlhttp.open(propfind?)
很少見
2.2 XmlHttp.send(varBody)
- varBody:指令集。
- 可以是XML格式數(shù)據(jù),也可以是字符串,流,或者一個(gè)無符號(hào)整數(shù)數(shù)組。
- 也可以省略,讓指令通過Open方法的URL參數(shù)代入。
- 發(fā)送數(shù)據(jù)的方式分為同步和異步兩種。
- 在異步方式下,數(shù)據(jù)包一旦發(fā)送完畢,就結(jié)束Send進(jìn)程,客戶機(jī)執(zhí)行其他的操作;
- 而在同步方式下,客戶機(jī)要等到服務(wù)器返回確認(rèn)消息后才結(jié)束Send進(jìn)程。
2.3 setRequestHeader(bstrHeader, bstrValue)
- bstrHeader:HTTP 頭(header)?
- bstrValue:HTTP 頭(header)的值
可以配合? open(post ) 使用
如果Open方法定義為POST,可以定義表單方式上傳:?
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"?
2.4 abort
- 取消/停止 當(dāng)前 HTTP 請求
- 如果XMlHttp對(duì)象被用過后readyState狀態(tài)一直是4,所以就不在觸發(fā)OnReadyStateChange事件了,因此responseText只能顯示一次,以后就無法工作了,
- 需要在后面加上 XMlHttp對(duì)象.abort一切搞定
2.5 getAllResponseHeaders
- 從響應(yīng)信息中檢索所有的標(biāo)頭字段
2.6 getResponseHeader("header")
2.7 這個(gè)??XMLHttpRequest.open()
- XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);?
- 不同于xmlhttp.open()方法
2.8 XMLHttpRequest.send(varBody)
send? 發(fā)送請求到http服務(wù)器并接收回應(yīng)?
??????? XMLHttpRequest.send(varBody);?
????????參數(shù)?
??????????? varBody 欲通過此請求發(fā)送的數(shù)據(jù)。?
??????? 調(diào)用send方法后,會(huì)先調(diào)用onreadystatechange方法,此時(shí)readyState狀態(tài)為1,然后會(huì)已經(jīng)進(jìn)程將readyState修改為2、3、4?
??????? 一般情況下,使用Ajax提交或者獲取參數(shù)可以采用GET、POST方式,使用GET方法將要提交的參數(shù)寫到open方法的url參數(shù)中,此時(shí)send方法的參數(shù)為null。?
??????? 例如 :?
????????? var url = "login.jsp?user=XXX&pwd=XXX";?
????????? xmlHttpRequest.open("GET",url,true);?
????????? xmlHttpRequset.send();?
??? 此外,也可以使用send方法傳遞參數(shù)。使用send方法傳遞參數(shù)使用的是POST方法,需要設(shè)定Content-Type頭信息,模擬HTTP POST方法發(fā)送一個(gè)表單,這樣服務(wù)器才會(huì)知道如何處理上傳的內(nèi)容。參數(shù)的提交格式和GET方法中url的寫法一樣。設(shè)置頭信息前必須先調(diào)用open方法。?
??? 例如:?
????????? xmlHttpRequest.open("POST","login.jsp",true);?
????????? xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");?
????????? xmlHttpRequest.send("user="+username+"&pwd="+password);?
??? 需要注意的是根據(jù)提交方式的不同,兩種提交方式分別調(diào)用后臺(tái)的doGet方法和doPost方法。?
2.9 response.write(objXML.responseText)
3 XMLHTTP屬性:
- 搜到的屬性如下
Microsoft.XMLHTTP_百度百科含義Microsoft.XMLHttp組件的屬性方法https://baike.baidu.com/item/Microsoft.XMLHTTP/5265442?fr=aladdin
3.1 xmlhttp的屬性羅列
返回狀態(tài)
- status:? ? ? ? ? ? ? ? ? ? ? ?Long型 服務(wù)器返回的HTTP狀態(tài)碼
- statusText :? ? ? ? ? ? ? ?String型 服務(wù)器HTTP響應(yīng)行狀態(tài)?
狀態(tài)碼等
- xml.http.readyState
- onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
返回內(nèi)容
- 除了 responseText 結(jié)果返回為字符串。其他不能直接打出來吧,其他格式取出!
- 分別用什么方法取出呢?
- responseBody:? ? ? ? ?結(jié)果返回為無符號(hào)整數(shù)數(shù)組。
- responseStream: ? ? ?結(jié)果返回為IStream流。
- responseText :? ? ? ? ? 結(jié)果返回為字符串。
- responseXML:? ? ? ? ? 結(jié)果返回為XML格式數(shù)據(jù)。
?3.1 xml.http.readyState
- XMLHTTP對(duì)象中的readyState屬性能夠反映出服務(wù)器在處理請求時(shí)的進(jìn)展?fàn)顩r。
- 客戶機(jī)的程序可以根據(jù)這個(gè)狀態(tài)信息設(shè)置相應(yīng)的事件處理方法。?
- status長整形,此屬性只讀,返回當(dāng)前請求的http狀態(tài)碼,此屬性僅當(dāng)數(shù)據(jù)發(fā)送并接收完畢后才可獲取。?
- readyState用來記錄當(dāng)前請求的狀態(tài),只讀。?
- 0(未初始化) Response對(duì)象已創(chuàng)建,但是尚未初始化,XML文檔上載過程尚未結(jié)束(尚未調(diào)用open方法)?
- 1(初始化)???? XML文檔已經(jīng)裝載完畢, 對(duì)象已初始化(調(diào)用了open方法,尚未調(diào)用send方法?)
- 2(發(fā)送數(shù)據(jù))?? XML文檔已經(jīng)裝載完畢,正在處理中. (send方法已調(diào)用,但是當(dāng)前的狀態(tài)及http頭未知)
- 3(數(shù)據(jù)傳送中)?部分XML文檔已經(jīng)解析, 已接收部分?jǐn)?shù)據(jù),因?yàn)轫憫?yīng)及http頭不全,這時(shí)通過responseBody和responseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤?
- ?4(完成)?????? 文檔已經(jīng)解析完畢,數(shù)據(jù)接收完畢,客戶端可以接受返回消息,此時(shí)可以通過通過responseBody和responseText獲取完整的回應(yīng)數(shù)據(jù)?
Set xmlobject = CreateObject("Microsoft.XMLHTTP")
xmlobject.Open "GET", strURL, False
xmlobject.Send
If xmlobject.readyState = 4 Then
strHTML = xmlobject.Responsetext
End If
3.2 onreadystatechange
- 當(dāng)readyState發(fā)生改變時(shí),調(diào)用onreadystatechange方法,onreadystatechange需要自己定義。?
- 在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
3.3 xml.http.status
3.4?xml.http.statusText
3.5?responseBody:
- ResponseBody是二進(jìn)制的數(shù)據(jù),是服務(wù)器傳來的沒有經(jīng)過任何加工的數(shù)據(jù)。
3.6 XmlHttp.responsetext 即是網(wǎng)頁內(nèi)容
????responseText?將響應(yīng)信息作為字符串返回.只讀?
2 ResponseText是按照utf-8編碼把ResponseBody轉(zhuǎn)換而成,也就是:ResponseText=ByteToStr(ResponseBody,"UTF-8")
Sub t1()
strUrl = "http://www.86pm25.com/paiming.htm"
getHtmlStr (strUrl)
End Sub
Public Function getHtmlStr(strUrl)
Dim XmlHttp
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "GET", strUrl, True
XmlHttp.send
r1 = XmlHttp.responsetext
' r2 = XmlHttp.responsexml
' r3 = XmlHttp.responsebody
' r4 = XmlHttp.responsestream
ThisWorkbook.Sheets("sheet5").Cells(1, 1) = r1
' ThisWorkbook.Sheets("sheet5").Cells(1, 2) = r2
' ThisWorkbook.Sheets("sheet5").Cells(1, 3) = r3
' ThisWorkbook.Sheets("sheet5").Cells(1, 4) = r4
' getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
' Set XmlHttp = Nothing
End Function
'''Function getHtmlStr(strUrl)
''' Dim XmlHttp
''' Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
''' XmlHttp.Open "GET", strUrl, True
'''
'''' If XmlHttpRequest.status_code = 200 Then
'''
''' XmlHttp.send
'''
''' ' Content = XmlHttp.responsetext
''' ' arr1 = Split(Content, "<Holding>") 'You cannot dim arr1() at the beginning
''' ' arr2 = Split(arr1(1), "</Holding>")
''' ' Sheet3.Cells(i, 5) = arr2(0)
'''
'''
'''
''' ThisWorkbook.Sheets("sheet5").Cells(1, 1) = Content
''' getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
''' Set XmlHttp = Nothing
'''
'''' End If
'''End Function
必須繞一手?
? ? r1 = XmlHttp.responsetext
? ? ThisWorkbook.Sheets("sheet5").Cells(1, 1) = r1
這樣就不行?
? ? ThisWorkbook.Sheets("sheet5").Cells(1, 1) =XmlHttp.responsetext
3.7 responseStream: ? ?
● responseStream:結(jié)果返回為IStream流 對(duì)象。
3.8 responseXML: ? ? ?
- responseXML??將響應(yīng)信息格式化為Xml Document對(duì)象并返回,只讀?
超時(shí)問題如何
下面的xml文件是動(dòng)態(tài)生成的最后用xmlHTTP傳送出去,這是一個(gè)在客戶端JavaScript腳本里的內(nèi)容,當(dāng)然你也可以寫在服務(wù)器,但是要相應(yīng)的改一些東西:(僅供大家參考,了解它的用法)
var xmlDoc=new ActiveXObject("MSXML2.DOMDocument");
flag=xmlDoc.loadXML("");
newNode =xmlDoc.createElement("編碼")
MarkNode=xmlDoc.documentElement.appendChild(newNode);
newNode =xmlDoc.createElement("StartMark")
newNode.text=StartMark;
MarkNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndMark")
newNode.text=EndMark;
MarkNode.appendChild(newNode)
newNode =xmlDoc.createElement("日期")
DateNode=xmlDoc.documentElement.appendChild(newNode);
newNode =xmlDoc.createElement("StartDate");
newNode.text=StartDate;
DateNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndDate")
newNode.text=EndDate;
DateNode.appendChild(newNode);
newNode =xmlDoc.createElement("數(shù)量")
SLNode =xmlDoc.documentElement.appendChild(newNode);
newNode =xmlDoc.createElement("StartSL")
newNode.text=StartShuL
SLNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndSL");
newNode.text=EndShuL
SLNode.appendChild(newNode);
newNode =xmlDoc.createElement("單價(jià)")
DJNode =xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("StartDJ")
newNode.text=StartDanJ;
DJNode.appendChild(newNode);
newNode =xmlDoc.createElement("EndDJ")
newNode.text=EndDanJ;
DJNode.appendChild(newNode);
newNode =xmlDoc.createElement("金額")
JENode =xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("StartJE")
newNode.text=StartJinE
JENode.appendChild(newNode)
newNode =xmlDoc.createElement("EndJE")
newNode.text=EndJinE
JENode.appendChild(newNode)
newNode =xmlDoc.createElement("倉庫代碼")
newNode.text=CK;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("票號(hào)")
newNode.text=RKPH;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("單位代碼")
newNode.text=CorpName;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("BiaoShi")
newNode.text=Biaoshi
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("FindCate")
newNode.text=FindCate
xmlDoc.documentElement.appendChild(newNode)
var xh =new ActiveXObject("MSXML2.XMLHTTP")
xh.open("POST","Find.asp",false)
xh.setRequestHeader("Content-Type","text/xml")
xh.setRequestHeader("Content-Type","gb2312")
xh.send(xmlDoc);
我的每一個(gè)newNode的text值是一個(gè)變量,也就是我客戶端form 中input的值
-------------------------------------------------------------------
ASP小偷程序如何利用XMLHTTP實(shí)現(xiàn)表單的提交
利用XMLHTTP來制作小偷的具體細(xì)節(jié)落伍很多人都發(fā)過和討論過了,但是在制作ASP小偷的過程中,很多人就發(fā)現(xiàn)ASP小偷不如PHP小偷的那么強(qiáng)
大了。確實(shí),如果在原網(wǎng)站如果存在表單提交或cookies的驗(yàn)證,對(duì)于ASP來說,不使用基于SOCKET的組件就難以完成,其實(shí),XMLHTTP的另外兩
個(gè)方法被我們忽略了,而這正是問題的關(guān)鍵。
下面首先來說說這個(gè)方法
1。.send()
由于流行的小偷是使用的GET而不是POST來傳送數(shù)據(jù),所以很多人忽略了這個(gè)方法,而使用SEND發(fā)送數(shù)據(jù)也很簡單,就是SEND("內(nèi)容"),可是,
發(fā)送表單就不是這么簡單,因?yàn)槟惆l(fā)送的表單如果是中文的話,就要牽扯到編碼的問題了。
首先,你在OPEN 時(shí)要確定是用POST 即 .open("POST",地址,是否異步)
然后,在SEND里面加上你表單的內(nèi)容,比如說,你要提交的表單有3個(gè)表單域,分別是A,B,C,對(duì)應(yīng)的值分別是1,2,3,那么,你在SEND里這
樣寫就可以提交表單了,.send("A=1&B=2&C=3"),怎么樣,很簡單吧,是不是沒想到呢?但是別高興的太早了,我前面說到了,如果表單的值是
中文的話,數(shù)據(jù)傳輸?shù)木蜁?huì)出錯(cuò)了。這里我們借助一個(gè)函數(shù)escape(),熟悉JAVASCRIPT的朋友都應(yīng)該知道這個(gè)函數(shù)的作用了,現(xiàn)在VBSCRIPT同樣支持這個(gè)函數(shù)。.send("A=escape('值1')&B=escape('值2')&C=escape('值3')")
2。.setRequestHeader()
接著上面的所說,你的數(shù)據(jù)send出去了,對(duì)方卻不會(huì)接收到,為什么了,其實(shí),那是因?yàn)槟愕腍TTP頭少了一個(gè)東西,然后用這個(gè)函數(shù)把加上去就可以了,具體就是.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded"), 告訴對(duì)方你是提交了一個(gè)urlencode編碼的表單。
好的,說完了表單的提交來說怎么傳送cookies和session
其實(shí)傳送cookies也很簡單了,同樣利用這個(gè)函數(shù)在HTTP頭里添加?xùn)|西,比如,我當(dāng)前在落伍的cookies是
cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145
現(xiàn)在我要發(fā)送這個(gè)cookies就直接是.setRequestHeader("Cookie","cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145")
當(dāng)然,有些網(wǎng)站頁面有頁面判斷功能,這個(gè)也不難,就是.setRequestHeader("Referer","來路的絕對(duì)地址")
這里還有個(gè)重要問題,就是這個(gè)方法由于是寫HTTP頭的,所以不能更改現(xiàn)有的HTTP頭,對(duì)于怎么用asp獲取對(duì)方頁面的cookies或session并且發(fā)出去.文章來源:http://www.zghlxwxcb.cn/news/detail-500372.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-500372.html
到了這里,關(guān)于excel爬蟲相關(guān)學(xué)習(xí)2:vba 爬蟲相關(guān)xmlhttp 前言:vba 爬蟲相關(guān)xmlhttp的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!