Saltar para o conteúdo
Comece grátis
Voltar ao blogue

Erros de estado do proxy: diagnosticar o ponto de falha da solicitação

Mihai MaximÚltima atualização em 16 min read
Erros de estado do proxy: diagnosticar o ponto de falha da solicitação
TL;DR: Um pedido falhado através de um proxy pode ser devido a uma falha de ligação, a um túnel rejeitado, a uma resposta gerada por um intermediário ou a uma resposta da origem. Identifique a fase e o componente que está a reportar o problema antes de alterar as credenciais, os tempos limite ou o comportamento de repetição de tentativas. Um código de estado, por si só, não determina a causa principal.

O seu scraper reporta um erro 502 e a sugestão imediata é alternar o proxy. Isso pode alterar o resultado, mas não o explica. A falha pode estar no seu proxy de encaminhamento, no gateway de destino ou noutro serviço entre os dois.

Os erros de estado do proxy são respostas de erro HTTP e falhas de ligação relacionadas encontradas enquanto um pedido percorre um intermediário. A expressão é uma abreviatura operacional útil, mas não constitui uma categoria de erro padronizada. Uma resposta HTTP, uma exceção do cliente e um campo de erro específico do fornecedor devem ser interpretados separadamente.

Para os programadores que recolhem dados, o objetivo é isolar a etapa em que ocorre a falha e escolher uma resposta delimitada. Repetir uma tentativa em caso de um problema temporário de ligação é diferente de repetir uma tentativa de autenticação rejeitada. Guardar uma página de erro como um registo do produto constitui, mais uma vez, uma falha distinta, mesmo que a sua biblioteca de pedidos considere a transferência concluída.

Este guia fornece uma sequência de diagnóstico, uma referência de códigos de estado e uma estrutura prática para relatórios de falhas. Parte do princípio de que está a utilizar fontes e credenciais aprovadas. A resolução de problemas deve restabelecer um fluxo de trabalho autorizado, não contornar as restrições de acesso de uma fonte nem ocultar pedidos repetidos por trás de uma lista crescente de alterações na rede.

Localize erros de estado do proxy no percurso da solicitação

Trace o percurso antes de interpretar o erro: cliente, proxy de reencaminhamento configurado, qualquer gateway de destino e aplicação de origem. Pode não ser possível controlar ou sequer observar todos os intermediários. Assinale os componentes que pode inspecionar e as evidências disponíveis em cada um deles.

Comece por verificar se existe uma resposta HTTP. Uma falha na pesquisa de DNS, uma ligação TCP recusada ou uma falha no handshake TLS podem impedir que a solicitação chegue à fase em que é devolvido um estado HTTP. Uma biblioteca de cliente pode classificar a exceção resultante como um erro de proxy sem sequer receber uma resposta 4xx ou 5xx.

Observação

O que determina

O que permanece desconhecido

O nome de host do proxy não pode ser resolvido

O cliente não conseguiu resolver o seu próximo salto configurado

Disponibilidade do destino

A ligação ao proxy foi recusada

A tentativa de ligação foi rejeitada

Se outro ponto de extremidade aprovado funciona

O comando CONNECT recebe um erro

O estabelecimento do túnel não foi bem-sucedido

Resposta da aplicação de destino

A resposta HTTP chega após o túnel

Chegou uma resposta ao cliente

Qual foi o componente a jusante que a gerou

O corpo da resposta é inesperado, apesar do estado de sucesso

A representação não correspondeu às suas expectativas de recolha

Se foi causado pelo estado do encaminhamento, da sessão ou da aplicação

Mantenha estas como categorias de resultados separadas no coletor. Substituir cada falha por proxy_failed descarte os detalhes necessários para a sua reparação. Um relatório ao nível da fonte deve distinguir as páginas tentadas que nunca estabeleceram ligação das páginas que devolveram uma recusa ou falharam na análise.

Para um exemplo concreto, suponha que todos os destinos falhem antes de a ligação do proxy ser estabelecida. Isso sugere que se investigue primeiro o ponto final configurado ou o caminho da rede local. Se um destino de diagnóstico permitido funcionar com a mesma configuração, mas uma fonte falhar posteriormente, as evidências apontam para um problema mais específico. Nenhuma das observações, por si só, prova a causa exata.

Altere uma variável de cada vez. Alterar simultaneamente o proxy, o cliente, a região, os cabeçalhos e a sessão pode resultar em sucesso, deixando a falha por explicar. Uma comparação reproduzível é mais útil do que uma resposta fortuita que não se consegue explicar.

Interprete os códigos de estado comuns sem os sobreinterpretar

A especificação semântica do HTTP define os significados padrão das respostas. Em particular, um gateway que reporta o código 502 recebeu uma resposta inválida de um servidor a montante, enquanto o código 504 indica que não foi recebida uma resposta atempada do servidor a montante. Essas definições identificam uma categoria, não a falha subjacente da rede ou da aplicação.

Significado do

Significado a investigar

Primeira verificação útil

401

É necessária autenticação para o recurso solicitado

Desafio de autenticação de origem e sessão

403

Pedido compreendido, mas recusado

Componente de relatório, política de acesso e âmbito da conta

407

Autenticação de proxy necessária

Desafio de proxy e credenciais de proxy configuradas

429

A taxa de pedidos excedeu um limite

Limitar o âmbito, orientação sobre atrasos, carga agregada de pedidos

502

O gateway recebeu uma resposta inválida do servidor a montante

Diagnóstico do gateway e evidências de falha a montante

503

Serviço indisponível, frequentemente de forma temporária

Indicação de serviço, manutenção ou sobrecarga

504

O gateway não recebeu uma resposta a montante atempada

Qual o salto que atingiu o tempo limite e o seu prazo configurado

Não transforme a tabela num mapa automático de atribuição de culpas. Um código 403 não é prova de bloqueio de IP, e um código 429 não é necessariamente um limite aplicado a um endereço IP. Um destino pode impor limites por conta, credenciais, recurso ou outra política. A referência 429 da MDN explica que o mecanismo de contagem não é definido apenas pelo estado.

No caso de um erro 503 ou 504, aumentar o tempo de espera do cliente pode não alterar nada. O intermediário que responde pode já ter aplicado o seu próprio prazo. Registe o tempo decorrido juntamente com a resposta e, em seguida, compare-o com os limites documentados do componente relevante. Uma espera mais longa na camada errada pode simplesmente manter os colaboradores ocupados por mais tempo.

Os códigos específicos de cada fornecedor necessitam do seu próprio espaço de nomes. Se um serviço devolver um estado personalizado ou um erro JSON, como um rótulo de encaminhamento interno, consulte a documentação atual desse fornecedor. Não apresente um número proprietário como um significado HTTP universal nem presuma que outro fornecedor o utilize de forma idêntica.

Por fim, mantenha a categoria da resposta no relatório de execução do seu conjunto de dados. Uma página rejeitada por uma política não deve tornar-se um produto ausente comum. Os utilizadores precisam de distinguir uma observação da fonte da incapacidade de observar a fonte.

Separe a autenticação do proxy da autenticação do site

Um código 407 constitui um motivo forte para inspecionar a etapa de autenticação do proxy, em vez do início de sessão no site. Uma resposta em conformidade deve incluir um Proxy-Authenticate desafio, e o cliente deve fornecer as credenciais do proxy através do mecanismo adequado. A documentação do MDN sobre o código 407 descreve essa troca.

Verifique o nome de host do proxy, a porta, o método de autenticação, o estado da conta e quaisquer requisitos documentados da lista de permissões. Confirme se o processo em execução recebeu a configuração pretendida. Um shell de programador pode ter variáveis de ambiente diferentes das de um trabalhador agendado ou de um contentor, pelo que o sucesso num portátil não valida a configuração da implementação.

Mantenha as credenciais de origem e do proxy distintas. Um cabeçalho de origem Authorization não substitui a autenticação do proxy, e uma palavra-passe do proxy não deve ser encaminhada para a aplicação de destino. Utilize a configuração de proxy documentada pelo seu cliente em vez de criar você mesmo um cabeçalho de credenciais genérico.

Evite incluir credenciais diretamente num comando de diagnóstico copiado. O histórico do shell, as listas de processos, a saída de CI e os sistemas de tickets podem retê-las. Utilize o mecanismo de segredos aprovado para o seu ambiente e oculte os valores de quaisquer rastreios de pedidos partilhados com outra pessoa.

Para sessões em sites, valide separadamente a página autenticada esperada. Um proxy pode autenticar-se com sucesso enquanto o destino devolve um formulário de início de sessão. O nosso guia sobre cookies HTTP explica por que razão a retenção de cookies e a validade da sessão do lado do servidor são observações diferentes.

Após corrigir a configuração, teste uma pequena solicitação autorizada antes de liberar a fila completa. Um ciclo de tentativas ilimitado com credenciais incorretas pode ocultar o erro original e gerar carga desnecessária. Um estado de falha bem definido suspende o trabalho dependente e identifica o responsável pela configuração que pode resolvê-la.

Distinguir o sucesso do CONNECT do sucesso do destino

Quando um proxy HTTP é utilizado para tunelizar uma ligação HTTPS, o cliente envia normalmente uma solicitação CONNECT indicando o anfitrião e a porta de destino. A resposta do proxy diz respeito ao estabelecimento do túnel. Um túnel bem-sucedido não indica se o handshake TLS subsequente ou a solicitação de destino serão bem-sucedidos.

Isto cria, pelo menos, três pontos de verificação úteis: ligar-se ao proxy, estabelecer o túnel e concluir a troca de dados com o destino. Dependendo da implementação, também pode existir TLS entre o cliente e o proxy. Registe qual é a ligação segura que está a falhar, em vez de considerar todos os erros de certificado como um problema do destino.

O manual do curl documenta valores de saída distintos para a resposta CONNECT (http_connect), a resposta final (response_code) e erros de transferência. Essas distinções são úteis ao comparar uma reprodução na linha de comandos com um rastreio da aplicação. Certifique-se de que a versão do curl instalada corresponde às opções que utiliza.

Um relatório de diagnóstico que indique «HTTP 200» pode ser enganador se esse número provier apenas do CONNECT. Confirme se o pedido de destino foi concluído e se a sua resposta contém a representação esperada. Da mesma forma, um valor de resposta igual a zero ou ausente nas ferramentas não constitui um código de estado HTTP real proveniente da fonte.

Mantenha a verificação de certificados ativada. Se a verificação falhar, verifique o nome de anfitrião configurado, o repositório de confiança, a hora do sistema e a configuração de interceção aprovada, quando aplicável. Desativar a verificação pode transformar uma falha de confiança óbvia numa ligação aparentemente bem-sucedida a um ponto final não confiável.

Utilize o cliente mais simples que reproduza o problema. A nossa comparação de clientes HTTP em Python ajuda a identificar diferenças na gestão de sessões e ligações. Registe o esquema de proxy e o comportamento de resolução de DNS como factos de configuração; não presuma que duas bibliotecas interpretem a mesma cadeia de caracteres abreviada de forma idêntica.

Utilize o Proxy-Status quando um intermediário o fornecer

O Proxy-Status campo de resposta adiciona informações de diagnóstico sobre o tratamento do intermediário. A RFC 9209 define parâmetros como error, received-status, e details, juntamente com tipos de erro, incluindo falhas de DNS, de ligação e de TLS. Aplica-se a proxies de reencaminhamento e gateways, e não apenas ao proxy que configurou localmente.

Uma resposta ilustrativa poderia ter o seguinte aspeto:

HTTP/1.1 504 Gateway Timeout
Proxy-Status: edge.example; error=connection_timeout

Aqui, o intermediário identificado reporta um tempo limite de ligação. Isso é mais específico do que apenas o código 504. Várias entradas podem descrever uma cadeia, mas as implementações decidem quando adicionar o campo; por isso, a sua ausência não significa necessariamente que nenhum intermediário tenha participado.

Trate o campo como evidência, não como prova incontestável. As informações de diagnóstico podem ser omitidas ou transformadas ao longo do percurso, e o texto arbitrário de uma resposta remota não deve tornar-se uma instrução de controlo fiável. Valide a sintaxe utilizando um analisador de campos estruturados adequado, caso a sua aplicação a utilize programaticamente.

Mantenha o diagnóstico completo disponível apenas quando o seu conteúdo for apropriado. Um details valor ou um identificador de próximo salto pode revelar informações de infraestrutura que não pertencem a uma página de erro pública. A sua mensagem voltada para o exterior pode resumir a categoria da falha, enquanto um registo de incidente restrito preserva os detalhes técnicos aprovados.

Relacione essa evidência a um identificador de execução e de tentativa. Um registo de proxy de uma tentativa diferente pode mostrar um próximo salto ou resultado diferente. Sem correlação, os engenheiros podem perder tempo a explicar duas solicitações não relacionadas como se fossem o mesmo evento.

Quando não estiver disponível um diagnóstico estruturado, indique que a atribuição está por resolver. «Resposta do gateway recebida; componente de origem não confirmado» é mais útil do que afirmar que o proxy de encaminhamento está avariado apenas porque a solicitação por acaso passou por um.

Reproduza a falha com uma comparação controlada

Escolha um destino aprovado e uma solicitação falhada representativa. Mantenha fixos o método, o URL, os cabeçalhos relevantes, a política de tempo limite e o contexto da sessão. Registe as versões do cliente e das dependências. Evite reproduzir solicitações que alterem o estado, a menos que a operação tenha um mecanismo de nova tentativa seguro e documentado.

Compare a rota configurada com outra rota de diagnóstico permitida apenas quando o seu ambiente o permitir. Não contorne um proxy corporativo obrigatório para verificar se uma solicitação funciona diretamente. Se o acesso direto for proibido, utilize pontos finais de integridade aprovados ou solicite ao proprietário da rede um teste controlado.

A referência de erros da libcurl distingue falhas como a resolução do proxy, a resolução do anfitrião, a ligação e a verificação do certificado. Utilize as categorias de exceções equivalentes no seu próprio cliente. Mantenha estes erros de transporte separados dos códigos de estado de resposta HTTP nos registos e métricas.

Registe um registo conciso e redigido. O exemplo sintético seguinte é um esquema de diagnóstico próprio da aplicação, não um formato de resposta exigido por um fornecedor de proxy:

{
  "run_id": "catalog-check-17",
  "attempt": 1,
  "destination_host": "catalog.example",
  "stage": "target_response",
  "connect_status": 200,
  "http_status": 504,
  "elapsed_ms": 12040,
  "diagnostic_category": "upstream_timeout",
  "response_body_saved": false,
  "credentials_redacted": true
}

A duração numérica é ilustrativa, não constituindo uma recomendação de tempo limite nem um valor de referência. Em produção, preencha os campos com base nos eventos observados e deixe os valores desconhecidos como tal. Nunca invente um estado CONNECT apenas porque o cliente foi configurado para utilizar um proxy.

Assim que tiver uma reprodução controlada, altere uma variável suspeita. Se a alteração resolver a falha, repita uma verificação delimitada e documente a diferença. Um único sucesso após uma longa série de falhas pode ser uma intermitência normal, em vez de uma prova de que a falha foi reparada.

Refaça a tentativa por categoria de falha, não por puro otimismo

As novas tentativas são úteis quando outra tentativa tem uma probabilidade razoável de sucesso e a repetição da operação é aceitável. Não constituem uma correção geral para credenciais rejeitadas, um pedido malformado ou uma restrição de acesso documentada.

Quando estiver presente e for aplicável, respeite Retry-After. O seu valor pode ser um atraso em segundos ou uma data HTTP, conforme documentado na referência Retry-After. Combine essa instrução com um número finito de tentativas, um prazo global para a tarefa e uma política para reprogramar o trabalho que não possa ser concluído na execução atual.

Evite repetições acumuladas. Se a biblioteca HTTP, o serviço de proxy e o executor de tarefas repetirem cada um de forma independente, uma única solicitação lógica pode gerar mais tentativas do que a aplicação espera. Identifique qual a camada responsável pelas decisões de repetição e exponha o número real de tentativas sempre que possível.

Utilize tentativas de repetição atrasadas com jitter para falhas transitórias quando não se aplicar nenhuma instrução mais específica. Limite a concorrência por fonte e monitorize a carga agregada de todos os trabalhadores. Um atraso local num processo não controla a taxa gerada por toda a frota.

Pause ou reduza o tráfego quando as falhas persistirem. Mantenha uma condição de recuperação para que a tarefa não permaneça suspensa indefinidamente, mas torne a verificação limitada e adequada à fonte. Falhas de autenticação e de política devem, geralmente, exigir uma revisão da configuração ou do acesso, em vez da substituição automática do ponto de extremidade.

Separe a recolha de tentativas de repetição da entrega de tentativas de repetição. Se os registos já tiverem sido aceites localmente e apenas a exportação tiver falhado, a recuperação das páginas cria uma nova observação e pode alterar os valores. O guia de scraping automatizado da Web explica essa distinção no ciclo de vida mais amplo da tarefa.

Verifique a correção e prepare uma escalação útil

Verifique mais do que apenas o desaparecimento do código de erro. Confirme o tipo de página esperado, os campos obrigatórios, o contexto da fonte e a contagem de registos aceites. Uma nova resposta 200 contendo uma página de desafio não restaurou o fluxo de trabalho de recolha.

Analise amostras com falha e bem-sucedidas após a alteração. Verifique se as novas tentativas duplicaram registos ou se falhas anteriores deixaram uma lacuna no conjunto de origem. Uma correção pode impedir erros futuros, embora ainda exija um preenchimento retroativo separado ou uma notificação aos consumidores para as execuções afetadas.

Para a escalação, inclua a janela de observação UTC, a versão do cliente, o identificador do ponto final do proxy censurado, o anfitrião de destino, a fase em que ocorreu a falha, o estado ou categoria de exceção, o ID do pedido e o resumo da reprodutibilidade. Indique quais as alterações de configuração que foram testadas e quais as rotas que foram autorizadas para comparação.

Não anexe ficheiros «cookie jars» em bruto, URLs contendo credenciais, cabeçalhos de autorização ou capturas de tráfego sem restrições. Se um fornecedor solicitar provas adicionais, partilhe o mínimo necessário através de um canal aprovado. Guarde o registo original com os dados ocultados para que uma investigação posterior possa distinguir os factos das suposições acrescentadas durante o incidente.

Conclua com uma regra operacional: o que irá detetar esta falha da próxima vez, quem é o responsável e que parte da tarefa deve ser suspensa? Isso transforma um diagnóstico pontual numa resposta repetível, sem partir do princípio de que todos os futuros erros de estado do proxy terão a mesma causa.

Pontos-chave

  • Distinga falhas de transporte, respostas de túnel, respostas de destino e falhas do analisador.
  • Interprete os códigos 407, 429, 502 e 504 como categorias que orientam a investigação, e não como causas-raiz definitivas.
  • Mantenha as credenciais do proxy e da origem separadas e preserve a verificação TLS.
  • Utilize diagnósticos estruturados e correlação de pedidos, quando disponíveis.
  • Limite as tentativas de repetição, verifique os dados devolvidos e preserve as provas de origem em falta.

Perguntas frequentes

Um erro de proxy pode desaparecer sem uma alteração de configuração?

Sim. Condições temporárias da rede ou do serviço podem resolver-se entre tentativas. Isso não prova que a configuração anterior estivesse correta em todos os aspetos. Guarde as evidências originais da falha e verifique uma amostra representativa após a recuperação. Se o problema se repetir, compare padrões por destino, fase e hora, em vez de tratar cada incidente como se não estivesse relacionado com os outros.

Os corpos dos erros devem ser armazenados juntamente com os registos recolhidos?

Mantenha os corpos dos erros separados dos dados aceites e guarde-os apenas quando a política o permitir. Uma página de erro pode conter detalhes da infraestrutura, identificadores ou informações repetidas da solicitação. Armazene um modelo redigido ou um registo de falha classificado quando isso fornecer provas suficientes e certifique-se de que os consumidores a jusante não o confundam com uma observação válida da fonte.

A alteração da região geográfica preserva resultados comparáveis?

Não necessariamente. Uma alteração de região pode afetar o idioma, a moeda, os produtos disponíveis ou as condições de acesso, mesmo quando corrige a conectividade. Registe essa alteração como contexto de recolha e valide os campos resultantes. Não junte silenciosamente observações de diferentes regiões num conjunto de dados que prometa uma visão consistente do mercado.

Conclusão

A resposta útil mais rápida a erros de estado do proxy é uma pergunta precisa: em que fase ocorreu a falha e que evidência a identifica? Determine se se trata de uma exceção de transporte, de uma resposta de túnel ou de uma resposta HTTP a jusante antes de alterar o sistema. Mantenha a observação original, teste uma hipótese de cada vez e verifique os dados após a reparação aparente.

Incorpore essas distinções no contrato de falhas do coletor. Um registo de execução claro, um responsável pelas tentativas de repetição bem definido e um relatório de escalamento editado reduzem a necessidade de investigações repetidas. Também preservam a diferença entre uma fonte que não devolveu dados correspondentes e uma fonte que a sua tarefa não conseguiu observar.

Se a manutenção da camada de recuperação estiver a consumir a atenção da equipa, avalie a API Scraper da WebScrapingAPI para esse componente, mantendo simultaneamente as suas próprias verificações de aceitação e o contexto do incidente. Transferir a recuperação não elimina a necessidade de compreender as falhas. Deve proporcionar-lhe um limite operacional mais claro, e não mais um local onde os dados em falta se tornam invisíveis.

Sobre o autor

Mihai Maxim, Desenvolvedor Full Stack @ WebScrapingAPI

Mihai Maxim

Desenvolvedor Full Stack

Mihai Maxim é um programador Full Stack na WebScrapingAPI, contribuindo em todas as áreas do produto e ajudando a criar ferramentas e funcionalidades fiáveis para a plataforma.

Web Scraping com AWS Lambda: Guia para Python e Java 2026
Guias

Web Scraping com AWS Lambda: Guia para Python e Java 2026

TL;DR: Resumo: A extração de dados da Web com o AWS Lambda funciona melhor quando cada invocação é curta, delimitada e pode ser repetida de forma independente. Comece com HTTP direto, AWS SAM e S3 e, só depois, adicione SQS, contentores, renderização no navegador, proxies ou uma camada de recuperação gerida, apenas quando a carga de trabalho demonstrar que precisa deles.

Suciu Dan32 min read
Ler artigo
Como utilizar o GoSpider: rastrear, limpar URLs e extrair dados
Guias

Como utilizar o GoSpider: rastrear, limpar URLs e extrair dados

TL;DR: Resumo: O GoSpider é um rastreador de linha de comandos destinado a descobrir URLs, não um extrator completo de dados estruturados. Este guia sobre como utilizar o GoSpider mostra como realizar um rastreio limitado, gerir resultados de forma organizada, fazer a transferência de dados do Colly para CSV e seguir um percurso de diagnóstico para respostas 403 ou páginas que exijam renderização em JavaScript.

Suciu Dan23 min read
Ler artigo
Como fazer o Scrape Redfin: Guia Python para Dados de Propriedade
Guias

Como fazer o Scrape Redfin: Guia Python para Dados de Propriedade

TL;DR: A Redfin expõe pontos de extremidade de API ocultos que retornam JSON estruturado para listagens de propriedades, tornando possível ignorar totalmente a análise HTML frágil. Este guia orienta-o na construção de um scraper Python que extrai dados de aluguer e venda, pesquisa por localização, monitoriza novas listagens através de sitemaps XML e exporta resultados limpos para CSV ou JSON.

Suciu Dan14 min read
Ler artigo

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.