2014-10-10 581 views
1

我需要从网站下载文件(不是由我写的)。 我有一个有效的用户名/密码来访问它,我可以手动。 但我想创建一个自动化过程(在C#中)定期下载它。使用C#从WebForm下载文件

手动我必须登录,浏览到下载页面,选择一些组合框,然后单击“下载”。 此链接执行回发并返回请求的文件。

我想我应该使用WebClient.DownloadFile,但我无法弄清楚如何传递所有必要的数据并请求回发正确的方式。

+1

您的问题无法在当前表单中回答(您可以使用的方式)。您需要说明网站上使用的认证类型(即OAuth)以及如何获取文件的URL。 – 2014-10-10 14:47:09

+0

我发布的代码将帮助您下载,但仍有大量数据仍未提供。 – Greg 2014-10-10 14:51:05

+0

您可以使用[Watin](http://watin.org/)或任何其他Web自动化API。 – Bolu 2014-10-10 14:54:37

回答

0

你会做这样的事情:

HttpWebRequest request = WebRequest.Create(@"http://stackoverflow.com") as HttpWebRequest; 
request.Credentials = NetworkCredentials(@"username", @"password"); 
request.Timeout = 300; 

if(string.IsNullOrEmpty(request)) 
    throw new Exception("Error in Request"); 

using(var stream = request.GetResponse().GetResponseStream()) 
    using(var writer = File.Create(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)) 
      stream.CopyTo(writer); 

你会使用NetworkCredentials到这些信息传递给一个网站。一旦你创建了HttpWebRequest,你将能够访问很多功能。

+0

谢谢,我了解凭据,但我不知道如何调用回发。如果我使用url创建流,我将拥有html表单,但我想要提交文件。 (对不起,我的英语) – WaveMax 2014-10-10 14:45:14

+1

附注:它不太可能帮助OP,因为大多数站点(如您的示例中的SO)使用OAuth或基于表单的身份验证... – 2014-10-10 14:45:26

+0

@AlexeiLevenkov我只是在那里放置一个URL。 – Greg 2014-10-10 14:49:32

3

这个其他网站有API吗?

否则,你将不得不做一个web请求,以他们需要的格式提交所有细节,然后读取响应,然后自动填写第二个表单以“检查某个组合框”,然后最后阅读包含该文件的响应。

此外,还有浏览器仿真软件,如硒,用于网站测试。你可以在那里设置一个测试/脚本,它会为你做上述所有的事情。我不确定如何处理下载的文件。

如果您想要执行路线1,请准备在每次其他网站更改时更改您的程序。如果他们添加一个验证码,那么你几乎搞砸了。

为了方便起见,在Web浏览器中存储的密码不会为您节省大部分麻烦?

+0

不幸的是,我不得不定期下载文件,每次都会有数十个文件。每个文件都必须到不同的位置并接受不同的阐述。我需要太多的时间手动完成。 – WaveMax 2014-10-10 15:07:03

+0

好吧,恕我直言,你需要做的是模拟一个网页浏览器。我的第一个问题是,你是否必须每次都从组合框中选择不同的值,因为如果你这样做的话,你的程序会变得很糟糕... – Del 2014-10-10 16:02:58

+0

不幸的是,我必须每次从组合框中选择不同的值。我的梦想是通过网络凭证和所有数据通过查询字符串请求一个Url,并将一个文件作为响应,但似乎它不能以这种方式工作。其实web服务会更加赞赏... – WaveMax 2014-10-13 09:33:41