2013-11-01 19 views
0

我有一个需要从需要登录的站点下载的文件列表。除非设置了相应的HttpRequestHeader.Cookie,否则该文件将不会下载。获取HTTP请求标题VB.Net/Telerik测试框架

如果我手动登录到网站并通过fiddler提取标题并将它们传递到Cookie插槽,则会下载文件。我想要做的是导航到该网站(使用Telerik测试框架),登录,阅读我需要下载的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 

回答

0

最后偶然发现了这一点,Telerik很简单。我只是通过这个函数的结果进了饼干头的Web客户端:

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 
1

我已经写了很久以前的这个函数给我,它做了你所需要的。尝试调用它来获取您在提琴手中看到的每个重定向,并且它会将所有响应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 
+0

+1的响应,我发现通过Telerik的测试框架一个更简单的方法,但欣赏的答案。 – maxedev