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

本文关键字:网站 下载 文件 方式 编程 | 更新日期: 2023-09-27 18:15:52

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

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

网站中有一个日期时间选择器,我想在其中以编程方式选择日期

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

表示特定日期的数据。你可以看看这个链接,明白我想说什么。

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

如果有人能帮助我,我将不胜感激。

Thanks In advance .

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

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

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

您需要您的数据与您的客户端请求一起发送到服务器,正如@Peter所解释的。

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

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

下面是我在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);
}

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

你必须先读这个http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx

如果你想添加一些信息,你可以使用WebClient。头,

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");