如何以编程方式从网站下载文件c#

时间:2011-11-26 03:21:21

标签: c# winforms web

我正在开发一个从网站上下载mcx数据的应用程序。如果我

,那就太好了

我自己创建一个应用程序并使用它。

网站上有一个datetimepicker,我想以编程方式选择日期

点击go按钮,稍后在excel中查看。当我点击excel上的视图时,它会下载文件

特定日期的数据。你可以看到这个链接并理解我想说的话。

http://www.mcxindia.com/sitepages/bhavcopy.aspx

如果有人能帮助我,我们将非常感激。

感谢Avance。

3 个答案:

答案 0 :(得分:4)

using System.Net;

WebClient webClient = new WebClient();
webClient.DownloadFile("http://mysite.com/myfile.txt", @"c:\myfile.txt");

但是如果文件太大,那么你应该使用异步方法 请查看此代码示例http://www.csharp-examples.net/download-files/

答案 1 :(得分:1)

使用WebClient有很多方法可以下载文件

您必须先阅读此内容 http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

如果您想要添加一些附加信息,可以使用WebClient.Headers,

并使用

using System.Net;

WebClient webClient = new WebClient();
var forms = new NameValueCollection();
forms["token"] = "abc123";
var responseData = webClient.UploadValues(@"http://blabla.com/download/?name=abc.exe", "POST", forms);
System.IO.File.WriteAllBytes(@"D:\abc.exe");

答案 2 :(得分:1)

根据@Peter的说明,您需要使用客户端请求 发布 您的数据到服务器。

这是一个ASP.net页面,因此它需要您在回发时发送一些数据才能完成回调。

使用谷歌,我能够找到this作为概念证明。

以下是我在Linqpad中编写的片段,用于测试它。这是:

void Main()
{

    WebClient webClient = new WebClient();



    byte[] b = webClient.DownloadData("http://www.mcxindia.com/sitepages/BhavCopyDateWise.aspx");

    string s = System.Text.Encoding.UTF8.GetString(b);

    var __EVENTVALIDATION = ExtractVariable(s, "__EVENTVALIDATION");

    __EVENTVALIDATION.Dump();

    var forms = new NameValueCollection(); 

    forms["__EVENTTARGET"] = "btnLink_Excel";
    forms["__EVENTARGUMENT"] = "";
    forms["__VIEWSTATE"] = ExtractVariable(s, "__VIEWSTATE");
    forms["mTbdate"] = "11%2F15%2F2011";
    forms["__EVENTVALIDATION"] = __EVENTVALIDATION;


    webClient.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");

    var responseData = webClient.UploadValues(@"http://www.mcxindia.com/sitepages/BhavCopyDateWise.aspx", "POST", forms); 
    System.IO.File.WriteAllBytes(@"c:\11152011.csv", responseData);
}

private static string ExtractVariable(string s, string valueName)
{
     string tokenStart = valueName + "\" value=\"";
     string tokenEnd = "\" />";

     int start = s.IndexOf(tokenStart) + tokenStart.Length;
     int length = s.IndexOf(tokenEnd, start) - start;
     return s.Substring(start, length);
}
相关问题