403带有WebClient请求的Forbidden ERROR

时间:2017-12-03 13:59:49

标签: vb.net webclient-download

我知道这是一个经常被问到的问题,也有很多建议和解决方案。但是,我尝试了几乎所有这些,但仍然无法解决这个问题,即使配置了Fiddler的http请求标头。我不确定这是否是特定的,或者我错过了其他重要的东西。所以我再次提出这个问题,希望能得到你的进一步支持。提前谢谢!

以下是链接使用的代码:

  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")

任何想法都会受到高度赞赏!

再次感谢!

斯坦利

1 个答案:

答案 0 :(得分:0)

首先,每当您使用.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

我很好奇所以我为你的网址做了同样的事情,发现它返回了这个有用的信息。

  

此页面无法显示。对于此问题造成的任何不便,我们深表歉意。确保您使用的是支持TLS.1.2的客户端。

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

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12