Pergunta

Um estranho, estou tentando ler ou003CHead> A seção de muitos sites diferentes por aí e um tipo específico de servidor, Apache, às vezes fornece o código 403 proibido. Nem todos os servidores Apache fazem isso, por isso pode ser uma configuração de configuração ou uma versão específica do servidor.

Quando eu verifico o URL com um navegador da web (Firefox, por exemplo), a página carrega bem. O código meio que se parece com o seguinte:

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

Normalmente, um 403 é um tipo de coisa falhada na permissão de acesso, mas essas são normalmente páginas não seguras. Estou pensando que o Apache está filtrando algo nos cabeçalhos de solicitação, pois não estou me preocupando em criar nenhum.

Talvez alguém que saiba mais sobre o Apache possa me dar algumas idéias do que está faltando nos cabeçalhos. Eu gostaria de manter os cabeçalhos o mais pequeno possível para minimizar a largura de banda.

Obrigado

Foi útil?

Solução

Tente definir o cabeçalho do usuário:

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

Outras dicas

Eu tive um problema semelhante e abaixo da configuração resolveu

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

Pode ser uma questão do cabeçalho do usuário, como "Thedugas" disse, ou de fato qualquer coisa que o navegador esteja silenciosamente configurado para fazer. Por exemplo, pode ser uma questão de não usar um servidor proxy que o navegador esteja usando ou não usando as credenciais corretas para o servidor proxy. Essas são coisas que já podem ser configuradas no navegador, para que você não esteja ciente de que elas precisam ser feitas.

Eu tive o mesmo problema e a resposta não era óbvia. Achei a solução farejando a comunicação de rede. Quando o Apache fornece sua página "Testando 1 2 3 ...", ele retorna um HTML com um código de Forneden 403. O navegador ignora o código e mostra a página, mas o De Webclient retorna uma mensagem de erro. A solução é ler a resposta dentro da captura de uma declaração de tentativa. Aqui está o meu código:

            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

Após a declaração de tentativa, o Reorno conterá a resposta HTML do servidor, independentemente do código de erro que o servidor retorna.

Os cabeçalhos não têm influência sobre esse comportamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top