如何在asp.net c#中基于URL获取https文件

cha*_*nya 3 .net c# asp.net

根据我的要求,我需要从URL获取文件.我试过了,但它总是抛出一个禁止的错误.请尝试解决此问题.请查看我的代码.

var webRequest = WebRequest.Create("https://www.fda.gov/ucm/groups/fdagov-public/@fdagov-drugs-gen/documents/document/ucm509432.pdf");  
using (var response = webRequest.GetResponse())
   using (var content = response.GetResponseStream())
      using (var reader = new StreamReader(content))
      {
         var strContent = reader.ReadToEnd();
      }
Run Code Online (Sandbox Code Playgroud)

Ogu*_*gul 6

当我从服务器检查响应内容时,我意识到它说明客户端需要支持TLSv1.2.

要启用TLSv1.2支持,请在创建HttpWebRequest类之前添加以下行:(感谢BugFinder的直接枚举值提示)

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

我发布了完整的源代码.

您还可以看到我测试了向服务器发送一些标头以查看是否缺少其中一个是问题:

class Program
{
    static void Main(string[] args)
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        HttpWebRequest webRequest = HttpWebRequest.Create("https://www.fda.gov/ucm/groups/fdagov-public/@fdagov-drugs-gen/documents/document/ucm509432.pdf") as HttpWebRequest;
        webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko";
        webRequest.Accept = "text/html, application/xhtml+xml, */*";
        webRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
        webRequest.Headers.Add("Accept-Language", "tr-TR");
        webRequest.Headers.Add("DNT", "1");

        using (var
             response = webRequest.GetResponse())
        using (var content = response.GetResponseStream())
        using (var reader = new StreamReader(content))
        {
            var strContent = reader.ReadToEnd();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)