Eu criei um programa, tentei postar uma string em um site e recebo este erro:
"O servidor cometeu uma violação de protocolo. Seção = ResponseStatusLine"
após esta linha de código:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Como posso corrigir essa exceção?
c#
httpwebrequest
Manish Patel
fonte
fonte
Às vezes, esse erro ocorre quando o
UserAgent
parâmetro de solicitação está vazio (na API github.com, no meu caso).Definir esse parâmetro como string personalizada não vazia resolveu meu problema.
fonte
WebClient
aqui stackoverflow.com/a/11841680/4795214HttpClient
add:client.DefaultRequestHeaders.Add("User-Agent", "Anything");
line para corrigir.O culpado no meu caso foi retornar uma
No Content
resposta, mas definir um corpo de resposta ao mesmo tempo. Que esta resposta me lembre e talvez a outros de não retornar umaNoContent
resposta com um corpo nunca mais.Este comportamento é consistente com 10.2.5 204 Nenhum conteúdo da especificação HTTP que diz:
fonte
The server committed a protocol violation. Section=ResponseStatusLine
erro ao usar o WebApi para retornar umaNoContent()
resposta personalizada que estava sendo enviadaNo Content
por algum motivo bizarro! Assim que tirei isso, o problema foi embora :)someContent
doreturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
+1Outra possibilidade: ao fazer um POST, o servidor responde com 100 continue de forma incorreta.
Isso resolveu o problema para mim:
fonte
var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
Isso estava acontecendo comigo quando eu tinha o Skype em execução na minha máquina local. Assim que fechei, a exceção foi embora.
Ideia cortesia desta página
fonte
Uma maneira de depurar isso (e ter certeza de que é a violação de protocolo que está causando o problema) é usar o Fiddler (Http Web Proxy) e ver se o mesmo erro ocorre. Se isso não acontecer (ou seja, o Fiddler tratou do problema para você), você poderá corrigi-lo usando o sinalizador UseUnsafeHeaderParsing.
Se você estiver procurando uma maneira de definir esse valor programaticamente, consulte os exemplos aqui: http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
fonte
Muitas soluções falam sobre uma solução alternativa, mas não sobre a causa real do erro.
Uma possível causa desse erro é se o servidor da web usa uma codificação diferente de
ASCII
ouISO-8859-1
para gerar a seção de resposta do cabeçalho. A razão de usarISO-8859-1
seria se oResponse-Phrase
contiver caracteres latinos estendidos.Outra possível causa desse erro é se um servidor da web usa o
UTF-8
que gera o marcador de ordem de byte (BOM). Por exemplo, a constante padrãoEncoding.UTF8
gera a BOM e é fácil esquecer isso. As páginas da web funcionarão corretamente no Firefox e no Chrome, masHttpWebRequest
irão bombar :). Uma solução rápida é mudar o servidor da web para usar a codificação UTF-8 que não produz o BOM, por exemplonew UTF8Encoding(false)
(o que está OK, desde queResponse-Phrase
contenha apenas caracteres ASCII, mas realmente deve usarASCII
ouISO-8859-1
para os cabeçalhos, e entãoUTF-8
ou alguma outra codificação para a resposta).fonte
Definir espera 100 continua a falso e reduzir o tempo ocioso do soquete para dois segundos resolveu o problema para mim
fonte
O Skype foi a principal causa do meu problema:
Este erro geralmente ocorre quando você configura o Visual Studio para depurar um aplicativo da Web existente em execução no IIS em vez do servidor Web de depuração ASP.NET integrado . O IIS escuta por padrão as solicitações da web na porta 80. Nesse caso, outro aplicativo já está escutando as solicitações na porta 80. Normalmente, o aplicativo ofensivo é o Skype, que por padrão assume a escuta nas portas 80 e 443 quando instalado. O Skype já está ocupando a porta 80. Portanto, o IIS não consegue iniciar.
Para resolver o problema, siga as etapas:
Skype -> Ferramentas -> Opções -> Avançado -> Conexão:
Desmarque "Usar porta 80 e 443 como alternativas para conexões de entrada".
E, conforme indicado abaixo, execute uma reinicialização do IIS quando terminar.
fonte
Tentei acessar a Last.fm Rest API por trás de um proxy e recebi este famoso erro.
Depois de tentar algumas soluções alternativas, apenas esses dois funcionaram para mim
e
fonte
Nenhuma das soluções funcionou para mim, então tive que usar um WebClient em vez de um HttpWebRequest e o problema não existia mais.
Eu precisava usar um CookieContainer, então usei a solução postada por Pavel Savara neste tópico - Usando CookieContainer com a classe WebClient
apenas remova "protegido" desta linha:
contêiner de CookieContainer privado = new CookieContainer ();
fonte
Uma causa provável desse problema é a configuração do WPAD (Web Proxy Auto Discovery Protocol) na rede. A solicitação HTTP será enviada de forma transparente para um proxy que pode enviar de volta uma resposta que o cliente não aceita ou não está configurado para aceitar. Antes de cortar seu código em bits, verifique se o WPAD não está em execução, especialmente se isso "começou a acontecer" do nada.
fonte
Meu problema é que liguei para o
https
endpoint comhttp
.fonte
A primeira coisa que tentamos foi desabilitar a compactação de conteúdo dinâmico para IIS, que resolveu os erros, mas o erro não foi causado no lado do servidor e apenas um cliente foi afetado por isso.
No lado do cliente, desinstalamos os clientes VPN, redefinimos as configurações da Internet e reinstalamos os clientes VPN. O erro também pode ser causado por antivírus anterior que tinha firewall. Então habilitamos a compressão de conteúdo dinâmico de volta e agora funciona bem como antes.
O erro apareceu no aplicativo personalizado que se conecta a um serviço da web e também no TFS.
fonte
No meu caso, o IIS não tinha as permissões necessárias para acessar o caminho ASPX relevante.
Dei ao usuário do IIS permissões para o diretório relevante e tudo estava bem.
fonte
Veja seu código e descubra se você está definindo algum cabeçalho com valor NULL ou vazio.
fonte
Comecei a receber este erro de meus serviços JSON / REST php
Comecei a receber o erro de uploads POST relativamente raros depois de adicionar o
ob_start("ob_gzhandler")
script GET php acessado com mais frequênciaConsigo usar apenas
ob_start()
e está tudo bem.fonte