Timeouts de proxy no curl: encontre a etapa que falhou
Separe conexão ao proxy, negociação do túnel, TLS e resposta travada para usar os limites de tempo do curl no diagnóstico.
Encontre a última operação concluída na saída detalhada do curl. “Conectado ao proxy, mas sem resposta CONNECT” delimita muito mais o problema do que “o proxy excedeu o tempo limite”.
Use uma requisição com limites de tempo, substituindo o exemplo local pelo seu proxy HTTP; a lista de proxies HTTP oferece outros endpoints para comparação:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/--connect-timeout 5 dá ao estabelecimento da conexão um único orçamento, incluindo consultas e negociações aplicáveis; ele não concede cinco segundos a cada etapa. --max-time 15 limita a operação inteira, inclusive o tempo de transferência após o estabelecimento.
| Onde o progresso para | O que investigar em seguida |
|---|---|
| Sem conexão ao proxy | Resolução do nome do proxy, porta de escuta, roteamento e política do firewall. |
| Proxy conectado; sem resposta do túnel | Carga do proxy, negociação de autenticação, política de acesso e alcance do destino a partir do proxy. |
| Túnel aceito; TLS incompleto | Alcance do destino, negociação TLS e interceptação administrada. |
| Cabeçalhos do destino chegam; corpo trava | Comportamento de transferência do servidor de origem, armazenamento em buffer nos intermediários e possível silêncio intencional da aplicação. |
Para entender a ordem das negociações, veja como o CONNECT transporta HTTPS. Uma parada perto do orçamento de conexão sugere a etapa de estabelecimento; uma parada posterior no limite total sugere transferência incompleta. Use a sequência junto com os tempos: só o tempo não identifica o componente. As mensagens variam entre compilações do curl, e uma porta TCP aberta não comprova que o CONNECT funciona.
Mantenha um lado fixo
Compare o mesmo destino por uma rota direta permitida:
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/Depois compare outro destino inofensivo pelo mesmo proxy. Se apenas um falhar, investigue essa rota ou a política de acesso ao destino. Se todos pararem na mesma etapa de estabelecimento, investigue o caminho comum do proxy. Guarde o horário de início, o endpoint, o destino e a última etapa concluída; remova credenciais, tokens, cookies e nomes privados antes de compartilhar logs.
Quando a conexão fica aberta sem progresso útil
Uma transferência de arquivo pode precisar de um limite de baixa velocidade além dos limites de estabelecimento e duração total:
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 60 --speed-limit 100 --speed-time 20 https://example.com/Isso cancela a operação quando a taxa sustentada permanece abaixo de 100 bytes por segundo por 20 segundos, mantendo um teto total de 60 segundos. Escolha valores conforme a carga de trabalho. Um fluxo de eventos pode estar saudável durante longos períodos de silêncio; uma regra de download pode encerrá-lo indevidamente.
Aumentar todos os limites adia o sintoma. Repetições imediatas podem adicionar conexões a um caminho sobrecarregado. Diagnostique com algumas comparações planejadas; qualquer política posterior de novas tentativas da aplicação precisa de seu próprio orçamento total e deve considerar se repetir a operação é seguro.