从https网站使用C#下载文件

时间:2017-04-02 07:41:57

标签: c# https webclient

我试图从https网站下载pdf文件,但它不起作用。我是C#的新手,所以进行了一些研究,发现了一个简单的代码。更糟糕的是,我得到的例外是非常通用的。请帮助。

function get_date($timestamp)
{
  $the_date = date('l jS \of F Y \a\t G:i:s A', $timestamp);
  return $the_date;
}

例外情况: 类型为#System; Net.WebException'的未处理异常发生在System.dll中 附加信息:远程服务器返回错误:(403)禁止。

2 个答案:

答案 0 :(得分:2)

服务器正在使用您的用户代理标头检查您是否是真实用户。它还要求您指定所需的mime类型。这不是一般 C#的东西,它只是你要连接的主机(nseindia.com)。

这适合我。

static void Main(string[] args)
{

    string file_ = "https://www.nseindia.com/content/circulars/CMPT34469.pdf";
    string path_ = @"E:\RSR\Office\EEP\FileDownloader\output\Hello_World.pdf";

    WebClient wc_ = new WebClient();
    wc_.Headers.Add(HttpRequestHeader.UserAgent, "Other");
    wc_.Headers.Add(HttpRequestHeader.Accept, "application/pdf");
    wc_.DownloadFile(file_, path_);
}

答案 1 :(得分:-1)

public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

static void Main(string[] args)
{
    string file_ = "https://www.nseindia.com/content/circulars/CMPT34469.pdf";
    string path_ = @"E:\RSR\Office\EEP\FileDownloader\output\Hello_World.pdf";

    WebClient wc_ = new WebClient();
    wc_.Headers.Add(HttpRequestHeader.UserAgent, "Other");
    wc_.Headers.Add(HttpRequestHeader.Accept, "application/pdf");
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
    wc_.DownloadFile(file_, path_);
}