首页 文章

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

提问于
浏览
0

我正在开发一个从网站下载mcx数据的应用程序 . 如果我这样会很好

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

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

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

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

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

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

谢谢在Avance .

3 回答

  • 4

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

    这是一个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);
    }
    
  • 1
    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

    使用WebClient有很多方法可以使用DownloadFile

    你必须先读这个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");
    

相关问题