WebClient 请求出现 403 Forbidden ERROR

403 Forbidden ERROR with WebClient request

我了解到这是一个比较常见的问题,也有很多建议和解决方案。但是,我尝试了几乎所有方法,但仍然无法从我这边解决这个问题,即使配置了 Fiddler 的 http 请求 headers。我不确定这是一个特定的问题还是我错过了其他重要的事情。所以我又问了这个问题,希望能得到你的进一步支持。提前致谢!

这是与 link 一起使用的代码:

  Dim WC As New System.Net.WebClient
        'WC.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705Wink")
        WC.Headers.Add(HttpRequestHeader.Accept, "Text/ html, Application / xhtml + Xml, Application / Xml;q=0.9, Image / webp, Image / apng,*/*;q=0.8")
        WC.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36")
        WC.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br")
        WC.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.8")
        'WC.Headers.Add(HttpRequestHeader.KeepAlive, "true")
        WC.Headers.Add(HttpRequestHeader.Host, "www.fda.gov")

        'WC.Headers.Add(HttpRequestHeader.ContentType, "")
        'WC.Headers.Add(HttpRequestHeader.ContentLength, "")

        Dim strURL As String = "https://www.fda.gov/downloads/Drugs/GuidanceComplianceRegulatoryInformation/Guidances/UCM227351.pdf"
        'Threading.Thread.Sleep(5000)
        WC.DownloadFile(strURL, "1.pdf")

如有任何想法,我们将不胜感激!

再次感谢!

史丹利

首先,无论何时使用 .net 发出 Web 请求,您都应该捕获异常,特别是 webexception 类型。这将使您获得服务器的响应。见下文。

  Dim strURL As String = "https://www.fda.gov/downloads/Drugs/GuidanceComplianceRegulatoryInformation/Guidances/UCM227351.pdf"

  Try
     WC.DownloadFile(strURL, "1.pdf")
  Catch ex As Net.WebException

     If ex.Response IsNot Nothing Then
        Dim response = ex.Response
        Dim dataStream = ex.Response.GetResponseStream
        Dim reader = New StreamReader(dataStream)
        Dim errorDetails As String = reader.ReadToEnd

        '  do something with errorDetails

     End If

  End Try

我很好奇,所以我对你的 URL 做了同样的事情,发现它 returns 这个有用的信息。

This page cannot be displayed. We're sorry for any inconvenience this issue has caused. Make sure you are using a client that supports TLS.1.2.

要更正错误,请在您的网络请求之前添加此代码。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12