簡體   English   中英

如何以編程方式從網站下載文件C#

[英]How to Download a file from a website programatically c#

我正在開發一個用於從網站下載mcx數據的應用程序。

我自己創建一個應用程序並使用它。

網站上有一個datetimepicker,我想以編程方式選擇日期

單擊轉到按鈕,然后在excel中查看。當我單擊excel時,它將下載文件

特定日期的數據。 您可以看到此鏈接,並了解我想說的話。

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

如果有人可以幫助我,將不勝感激。

非常感謝。

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/

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

您必須先閱讀此http://msdn.microsoft.com/zh-cn/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");

您需要按照@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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM