Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.Net.WebClient请求被禁止403,但浏览器不支持Apache服务器_.net_Apache_Http Headers_Webclient_Http Status Code 403 - Fatal编程技术网

System.Net.WebClient请求被禁止403,但浏览器不支持Apache服务器

System.Net.WebClient请求被禁止403,但浏览器不支持Apache服务器,.net,apache,http-headers,webclient,http-status-code-403,.net,Apache,Http Headers,Webclient,Http Status Code 403,奇怪的是,我试图阅读许多不同网站的部分,一种特殊类型的服务器,Apache,有时会给出代码403。并非所有apache服务器都这样做,因此可能是配置设置或服务器的特定版本 然后,当我使用web浏览器(例如Firefox)检查url时,页面加载良好。代码排序如下所示: var client = new WebClient(); var stream = client.OpenRead(new Uri("http://en.wikipedia.org/wiki/Barack_Obama")); 通

奇怪的是,我试图阅读许多不同网站的部分,一种特殊类型的服务器,Apache,有时会给出代码403。并非所有apache服务器都这样做,因此可能是配置设置或服务器的特定版本

然后,当我使用web浏览器(例如Firefox)检查url时,页面加载良好。代码排序如下所示:

var client = new WebClient();
var stream = client.OpenRead(new Uri("http://en.wikipedia.org/wiki/Barack_Obama"));
通常,403是一种访问权限失败的类型,但这些通常是不安全的页面。我认为Apache正在过滤请求头中的某些内容,因为我不想费心创建任何内容

也许对Apache有更多了解的人可以告诉我标题中缺少了什么。我想保持尽可能小的标题,以尽量减少带宽


谢谢

尝试设置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);

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

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

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

我也有同样的问题,答案并不明显。我找到了嗅探网络通信的解决方案。当Apache给出“Testing1234…”页面时,它返回一个带有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语句之后,无论服务器返回的错误代码是什么,retino都将包含来自服务器的HTML响应


标题对这种行为没有影响。

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