【问题标题】:403 Forbidden ERROR with WebClient requestWebClient 请求的 403 禁止错误
【发布时间】:2017-12-03 13:59:48
【问题描述】:

我知道这是一个非常常见的问题,并且有很多建议和解决方案。但是,我几乎尝试了所有这些,但仍然无法从我这边解决这个问题,即使配置了 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")

任何想法将不胜感激!

再次感谢!

斯坦利

【问题讨论】:

    标签: vb.net webclient


    【解决方案1】:

    首先,每当您使用 .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 做了同样的事情,发现它返回了这个有用的信息。

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

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

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    

    【讨论】:

    • 非常感谢您的指导。虽然一开始提出了一个新问题,即 .NET 4.0 不支持 TLS12,但是一旦升级到 .NET 4.5,它就得到了修复。现在一切都很完美。
    • 以下链接介绍了一些解决 TLS 问题的方法。 blogs.perficient.com/microsoft/2016/04/tsl-1-2-and-net-support.
    • 如果使用 .net 4.0 你可以添加这个来强制 TLS1.2 ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多