WebBrowser控件在会话中下载文件

8
我正在使用WebBrowser控件浏览登录页面并下载文件。由于我找不到一种方法来使用该控件自动管理下载,因此我试图使用WebClient类来实现这一目的。

问题在于,由于WebClient不在与浏览器相同的上下文/会话中,所以我只能下载安全错误屏幕。

你有任何想法如何将WebBrowser会话的上下文传递给WebClient吗?

一个晚点的答案,供将来参考:可以使用URLDownloadToCacheFile实现此功能(https://dev59.com/RnfZa4cB1Zd3GeqPP0oD#19025793)。 - noseratio - open to work
2个回答

13

经过一周的谷歌搜索和尝试解决方案,我发现了一个非常简单的方法!

如果你想在HTTPS URL中使用WebBrowser控件静默下载文件,只需执行以下步骤:

1)使用WebBrowser登录 2)使用以下代码进行下载。

//build de URL 

  string _url = "https://........."

  //define a download file name and location

  string _filename = @"C:\Users\John\Documents\somefile.pdf";

  //create a webcliente

  WebClient cliente = new WebClient();

  //do some magic here (pass the webbrowser cokies to the webclient)

  cliente.Headers.Add(HttpRequestHeader.Cookie, webBrowser1.Document.Cookie);

  //and just download the file

  cliente.DownloadFile(_urlpdf, _filename);

它解决了我的问题


1
谢谢!它实际上起作用了。你为我节省了很多时间。 - fredrik.hjarner
你用 cookies 救了我的命!! - EugenSunic
我正在寻找的答案!非常感谢你! - Brian Antiqueña

4

这只是简单地模拟WebBrowser会话中的cookie和头文件,并重新使用它们来模拟WebClient的会话,但看起来你已经在这条路上很熟练了。

以下是我处理的步骤:

  1. 从WebBrowser获取cookie和头文件。

    Cookie:可以通过处理WebBrowser控件的DocumentCompleted事件并解析从DocumentCompleted事件设置的cookie来获取您的WebBrowser会话中的cookie。

    头文件:使用像Fiddler [www.fiddler2.com/]这样的代理读取头文件,以便您知道服务器需要什么。

  2. 利用上面收集的身份验证信息进行WebClient。

    Headers:遍历收集到的所有头文件,并确保它们被添加到WebClient中,例如使用myWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");

    Cookies:请参见此帖子


我已经开始测试了。这需要一些时间,但我会让你知道我的进展情况。谢谢。 - g.foley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接