【问题标题】:System.Net.WebClient request gets 403 Forbidden but browsers do not with Apache serversSystem.Net.WebClient 请求获得 403 Forbidden 但浏览器不使用 Apache 服务器
【发布时间】:2011-01-19 22:36:14
【问题描述】:

奇怪的是,我正在尝试阅读许多不同网站的

部分,而一种特定类型的服务器 Apache 有时会给出禁止代码 403。并非所有 apache 服务器都这样做,因此它可能是配置设置或服务器的特定版本。

然后,当我使用网络浏览器(例如 Firefox)检查 url 时,页面加载正常。代码如下所示:

var client = new WebClient();
var stream = client.OpenRead(new Uri("http://en.wikipedia.org/wiki/Barack_Obama"));

通常,403 是访问权限失败之类的事情,但这些通常是不安全的页面。我认为 Apache 正在过滤请求标头中的某些内容,因为我不想创建任何内容。

也许对 Apache 有更多了解的人可以给我一些关于标题中缺少的内容的想法。我想保持标题尽可能小以最小化带宽。

谢谢

【问题讨论】:

    标签: .net apache http-headers webclient http-status-code-403


    【解决方案1】:

    尝试设置 UserAgent 标头:

    string _UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
    client.Headers.Add(HttpRequestHeader.UserAgent, _UserAgent);
    

    【讨论】:

    • 这就是我需要的提示。谢谢!
    • 403 也可能是由 TLS 问题引起的。要进行验证,您应该检查 WebException.Response 对象的文本。或者,尝试将其添加到您的代码中:ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 这将强制 TLS 1.2
    【解决方案2】:

    我遇到了类似的问题,下面的设置解决了它

    Client.Headers["Accept"] = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
    Client.Headers["User-Agent"] ="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC)";
    

    【讨论】:

      【解决方案3】:

      这可能是 UserAgent 标头的问题,正如“thedugas”所说,或者实际上是浏览器默认配置为执行的任何操作。例如,可能是没有使用浏览器正在使用的代理服务器,或者没有使用代理服务器的正确凭据。这些可能已经配置到浏览器中,所以您不知道它们需要完成。

      【讨论】:

        【解决方案4】:

        我有同样的问题,答案并不明显。我找到了嗅探网络通信的解决方案。当 Apache 给出“Testing 1 2 3...”页面时,它返回一个带有 403 禁止代码的 html。浏览器忽略获取代码并显示页面,但 de WebClient 返回错误消息。解决方案是读取 Try 语句的 Catch 内的响应。这是我的代码:

                    Dim Retorno As String = ""
                    Dim Client As New SiteWebClient
                    Client.Headers.Add("User-Agent", "Mozilla/ 5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " &
                                       "(KHTML, Like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
                    Client.Headers.Add("Accept-Language", "pt-BR, pt;q=0.5")
                    Client.Headers.Add("Accept", "Text/ html, application / xhtml + Xml, application / Xml;q=0.9,*/*;q=0.8")
                    Try
                        Retorno = Client.DownloadString("http://" & HostName & SitePath)
                    Catch ex As Exception
                        If ex.GetType = GetType(System.Net.WebException) Then
                            Try
                                Dim Exception As System.Net.WebException = ex
                                Dim Resposta As System.Net.HttpWebResponse = Exception.Response
                                Using WebStream As New StreamReader(Resposta.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"))
                                    Retorno = WebStream.ReadToEnd
                                End Using
                            Catch ex1 As Exception
        
                            End Try
                        End If
                    End Try
        

        在 Try 语句之后,Retorno 将包含来自服务器的 HTML 响应,无论服务器返回什么错误代码。

        标头对此行为没有影响。

        【讨论】:

          猜你喜欢
          • 2019-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-14
          • 2021-07-27
          • 2019-07-31
          • 2018-08-21
          相关资源
          最近更新 更多