如何以编程方式从网站下载文件
本文关键字:网站 下载 文件 方式 编程 | 更新日期: 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");