簡體   English   中英

獲取HTTP請求頭VB.Net/Telerik測試框架

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM