[英]Get HTTP Request Headers VB.Net / Telerik Testing Framework
我有一個文件列表,需要從需要登錄的站點下載。 除非設置了適當的HttpRequestHeader.Cookie,否則該文件將不會下載。
如果我手動登錄該站點,並通過提琴手提取標題並將其傳遞到Cookie插槽,則會下載文件。 我想做的是導航到該站點(使用Telerik Testing Framework),登錄,閱讀我需要下載的URL,然后調用WebClient.DownloadFile。
我試圖通過Telerik下載文件,但是將作業部署到Windows Server時出現了問題。
經過大量的搜索之后,在導航到收集URL的頁面后,我仍然不知道如何通過Telerik拉HttpRequestHeaders-這些應該是我需要傳遞給WebClient來下載文件的正確值。
有人可以指出我正確的方向還是提供其他選擇?
提前致謝。
Using client
client.Credentials = New NetworkCredential("user", "pass")
client.Headers.Add(System.Net.HttpRequestHeader.Accept, "*/*")
client.Headers.Add(System.Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate")
client.Headers.Add(System.Net.HttpRequestHeader.AcceptLanguage, "en-US")
client.Headers.Add(System.Net.HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)")
client.Headers.Add(System.Net.HttpRequestHeader.Cookie, "WLP-COOKIE1=r1593517685; JSESSIONID=Sz6G1lpvwhGB6FmqN6ySPbtf2cK2fs09hTtsX2sqcSwtLL7rKzpy!-1832769242; iPlanetDirectoryPro=AQIC5wM2LY4SfczHcm5%2FeHFKpWlxpQ71jtwzwJ75uHryjzA%3D%40AAJTSQACMTAAAlMxAAIwMQ%3D%3D%23; MMISPRODPOSCsource=AQIC5wM2LY4SfczHcm5%2FeHFKpWlxpQ71jtwzwJ75uHryjzA%3D%40AAJTSQACMTAAAlMxAAIwMQ%3D%3D%23")
client.Headers.Add(System.Net.HttpRequestHeader.Referer, "https://mysite.com")
client.DownloadFile(url, file)
End Using
我很久以前已經為我編寫了此函數,它可以滿足您的需求。 嘗試為您在fiddler中看到的每個重定向調用它,它將所有響應cookie保存在全局cookie
對象中。 我已經從c#中自動轉換了此代碼,因此也許您需要對其進行一些修改。
Private cookies As CookieContainer = Nothing
Public Function GetPOST(url As String, data As String) As String
Dim httpWebRequest__1 As HttpWebRequest = Nothing
Try
httpWebRequest__1 = DirectCast(HttpWebRequest.Create(New Uri(url)), HttpWebRequest)
httpWebRequest__1.Method = If([String].IsNullOrWhiteSpace(data), WebRequestMethods.Http.[Get], WebRequestMethods.Http.Post)
httpWebRequest__1.ContentType = "application/x-www-form-urlencoded"
httpWebRequest__1.UserAgent = _userAgent
httpWebRequest__1.Accept = "*/*"
httpWebRequest__1.Headers.Add(HttpRequestHeader.AcceptLanguage, "de-DE,de;q=0.8,en-US;q=0.7,en;q=0.3")
httpWebRequest__1.Headers.Add(HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8;q=0.7,*;q=0.3")
httpWebRequest__1.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch")
httpWebRequest__1.Headers.Add("X-Requested-With", "XMLHttpRequest")
httpWebRequest__1.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate
httpWebRequest__1.Timeout = InlineAssignHelper(httpWebRequest__1.ReadWriteTimeout, 15000)
httpWebRequest__1.CookieContainer = cookies
If Not [String].IsNullOrWhiteSpace(data) Then
Dim dataBytes As Byte() = ASCIIEncoding.[Default].GetBytes(data)
httpWebRequest__1.ContentLength = dataBytes.Length
Using stream As Stream = httpWebRequest__1.GetRequestStream()
stream.Write(dataBytes, 0, dataBytes.Length)
End Using
End If
If httpWebRequest__1.CookieContainer Is Nothing Then
httpWebRequest__1.CookieContainer = New CookieContainer()
End If
Dim res As HttpWebResponse = DirectCast(httpWebRequest__1.GetResponse(), HttpWebResponse)
Using stream As Stream = res.GetResponseStream()
Dim str As New StreamReader(stream)
_currentResponceLocation = res.ResponseUri.ToString()
Return str.ReadToEnd()
End Using
Catch generatedExceptionName As Exception
Return GetPOST(url, data)
Finally
For Each c As Cookie In httpWebRequest__1.CookieContainer.GetCookies(New Uri("https://" + httpWebRequest__1.Host))
cookies.SetCookies(New Uri("https://" + httpWebRequest__1.Host), c.Name + "=" + c.Value)
Next
End Try
End Function
最終偶然發現了這一點,通過Telerik進行操作相當簡單。 我只是將此函數的結果傳遞到webclient的cookie標頭中:
Public Function GetCookies(ByVal url As String) As String
Dim cookies As String
For Each cookie In xBrowser.Cookies.GetCookies(url)
If String.IsNullOrEmpty(cookies) Then
cookies &= cookie.ToString
Else
cookies &= "; " & cookie.ToString
End If
Next
Return cookies
End Function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.