Asp WinHttp.WinHttpRequest.5.1 對象使用詳解 偽造 HTTP 頭信息
2024-05-04 10:59:48
供稿:網友
由于微軟封鎖了 XmlHttp 對象,所以無法偽造部分 HTTP 頭信息,但是 WinHttp.WinHttpRequest.5.1 對象,它居然用可以成功偽造所有 http 請求的 header 信息!
從msdn得知,WinHttp.WinHttpRequest.5.1 是 msxml 4.0 的底層對象,也就是說 XMLHTTP/ServerXMLHTTP 也是在它的基礎上封裝而來,WinHttpRequest 的用法與 XmlHttp 大致相同。
WaitForResponse 在使用異步方式發送請求時,可以用這個方法來控制請求的進程,指定的等待時間,以秒為一個異步傳送方法來完成的值,SetTimeouts。
在服務端腳本中,不可以像客戶端那樣直接使用回調函數來控制異步請求,也沒有相應的函數來使用程序休眠一定的時間,因此,為了等待請求返回,我們可以使用這個方法來等待一定時間。
復制代碼 代碼如下:
<%
Dim WinHttp
Set WinHttp = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
'設置參數
WinHttp.SetTimeouts 60000, 60000, 60000, 3000 '設置操作超時時間
'WinHttp.SetTimeouts resolveTimeout, connectTimeout, sendTimeout, receiveTimeout
'resolveTimeout = 10000 '解析 DNS 名字的超時時間,10000 毫秒。
'connectTimeout = 10000 '建立 Winsock 連接的超時時間,10000 毫秒。
'sendTimeout = 120000 '發送數據的超時時間,120000 毫秒。
'receiveTimeout = 60000 '接收 response 的超時時間,60000 毫秒。
WinHttp.Option(4) = 13056 '忽略錯誤標志
WinHttp.Option(6) = False '為 True 時,當請求頁面重定向跳轉時自動跳轉,False 不自動跳轉,截取服務端返回的302狀態。
WinHttp.Open "GET", "http://www.baidu.com/", False 'GET 或 POST, Url, False 同步方式;True 異步方式
'組成 HTTP 頭信息
WinHttp.SetRequestHeader "Accept", "*/*" '接受數據類型
WinHttp.SetRequestHeader "Accept-Language", "zh-cn,zh" '用戶系統語言
WinHttp.SetRequestHeader "User-Agent", "Mozilla/6.0" '用戶瀏覽器信息
WinHttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" '編碼方式
WinHttp.SetRequestHeader "Referer", "http://www.baidu.com/" '來路
WinHttp.SetRequestHeader "Connection", "Close" 'Close = 不保持連接,Keep-Alive = 保持連接(持久連接)
'WinHttp.SetRequestHeader "Accept-Encoding", "gzip, deflate" '如果發送,會返回 gzip, deflate 壓縮過的編碼
'WinHttp.SetRequestHeader "Content-Length", Len(Str) '內容長度,Post 方式用的。
WinHttp.SetRequestHeader "Cookie", "test cookie!" '設置 Cookie
'發送數據
WinHttp.Send 'Post 方式:WinHttp.Send (參數)
WinHttp.WaitForResponse '等待返回請求,XMLHTTP中也可以使用
'輸出結果
Response.Write WinHttp.Status '當前 HTTP 狀態
'Response.Write WinHttp.ResponseText '文本數據
Response.BinaryWrite WinHttp.ResponseBody '二進制數據流數據
%>
Option()相關:
WinHttpRequestOption_UserAgentString = 0;
WinHttpRequestOption_URL = 1;