Como usar cURL com proxy (e corrigir erros comuns)

Última atualização em August 10, 2026
How cURL requests travel through a proxy
Resumo com IA
  • Configure o cURL para usar proxies HTTP, HTTPS e SOCKS com flags de linha de comando, variáveis de ambiente, autenticação e práticas seguras de tratamento de credenciais.
  • Entenda como o roteamento por proxy, os túneis HTTPS CONNECT e a resolução de DNS local versus no proxy afetam as requisições e a privacidade.
  • Verifique o caminho real de saída com testes reproduzíveis, em vez de assumir que uma resposta bem-sucedida prova que o proxy foi usado.
  • Diagnostique falhas comuns como erros 407 de autenticação, problemas com certificados TLS, timeouts, DNS e limites de taxa 429 com um fluxo de troubleshooting em camadas.
  • Aplique práticas voltadas para produção, como retries, timeouts, logs e comportamento fail-closed, para que a automação não contorne silenciosamente o proxy desejado.

O cURL está presente em cerca de 20 bilhões de instalações no mundo todo — ele já vem integrado ao macOS, à maioria das distribuições Linux e, por padrão, ao Windows 10/11. Ainda assim, se você perguntar a dez desenvolvedores como encaminhar corretamente uma requisição cURL por meio de um proxy, provavelmente vai receber dez respostas um pouco diferentes — e metade delas vai falhar assim que autenticação ou SOCKS entrar em cena.

É justamente essa lacuna que eu quero fechar aqui. A maioria dos tutoriais mostra um comando, diz que funciona e segue em frente. Eles não mostram como confirmar se o proxy realmente está fazendo alguma coisa (spoiler: às vezes, não está), e com certeza não explicam os códigos de erro que aparecem na primeira pequena variação fora do cenário ideal. Este guia cobre tudo — proxies HTTP/HTTPS, SOCKS4/SOCKS5/socks5h, variáveis de ambiente (e suas pegadinhas bem específicas), uma tabela de solução de problemas de verdade e o que fazer quando cURL e proxy simplesmente já não dão conta do recado.

O que é cURL e por que usá-lo com proxy?

cURL é uma ferramenta de linha de comando para transferir dados de e para uma URL. Só isso — sem interface gráfica, sem enfeites, apenas um programa que fala HTTP, HTTPS, FTP e alguns outros protocolos. A forma mais simples de usá-lo é:

curl https://example.com

Isso busca a página e despeja o HTML bruto no terminal. Útil por si só, mas o verdadeiro motivo pelo qual desenvolvedores e usuários técnicos de negócio recorrem ao cURL é testar APIs, extrair dados, verificar conteúdo com restrição geográfica e executar requisições dentro de pipelines de CI/CD.

Um proxy fica entre sua máquina e o servidor de destino, encaminhando sua requisição em seu nome. O destino vê o IP do proxy, não o seu. Isso faz diferença por motivos legítimos: testar como seu site aparece de outro país, contornar limites de taxa durante QA ou rotear tráfego por um gateway corporativo exigido pela empresa. O cURL suporta toda a gama de protocolos de proxy — HTTP, HTTPS, SOCKS4 e SOCKS5 — e as flags que você vai ver repetidamente neste guia são -x / --proxy (o endereço do proxy), -v (saída detalhada, sua melhor amiga na depuração) e -k (pula a verificação SSL, algo que você basicamente nunca deve usar fora de testes).

Uma observação rápida antes de avançarmos: este guia trata da mecânica de rede ao usar um proxy com cURL. Ele não autoriza ignorar os termos de serviço de um site-alvo ou a política de segurança da sua organização. Um proxy muda o caminho da rede — não muda o que é permitido ou legal.

Antes de começar

Dificuldade: Iniciante a Intermediário
Tempo necessário: ~15 minutos para percorrer os exemplos principais
O que você vai precisar:

  • cURL instalado (verifique com curl --version — se você usa macOS, Linux ou Windows 10/11, é bem provável que ele já esteja lá)
  • Credenciais do proxy fornecidas pelo provedor: host, porta, protocolo (HTTP/HTTPS/SOCKS) e nome de usuário/senha, se necessário
  • Um terminal (Terminal no macOS, qualquer shell no Linux, PowerShell ou CMD no Windows)

Se, por algum motivo, o cURL não estiver instalado, a solução é simples: brew install curl no macOS via Homebrew, sudo apt install curl no Debian/Ubuntu ou sudo yum install curl no RHEL/CentOS. No Windows, ele vem junto com o sistema desde o build 17063 do Windows 10.

Ao longo deste guia vou usar valores de exemplo — proxy.example:8080 para o endereço do proxy e user:pwd para as credenciais. Troque isso pelos dados reais do seu proxy e nunca cole credenciais verdadeiras no histórico do shell, em uma captura de tela ou em uma mensagem no Slack. Já vi mais senhas de proxy vazarem em canais do Slack do que gostaria de admitir.

Como usar cURL com proxy HTTP ou HTTPS

Esta é a configuração mais comum e a que você vai usar na imensa maioria das tarefas com proxy.

Usando a flag -x / --proxy

A sintaxe básica é esta:

curl -x "http://user:pwd@proxy.example:8080" "https://httpbin.org/ip"

-x e --proxy fazem exatamente a mesma coisa — use a que for mais fácil de lembrar. Como HTTP é o esquema de proxy padrão do cURL, tecnicamente você pode até omitir o prefixo http:// e escrever apenas proxy.example:8080. Ainda assim, eu deixaria isso explícito, porque daqui a seis meses você vai agradecer pela clareza.

Coloque a URL inteira entre aspas duplas. Se a sua senha contiver @, # ou &, uma string sem aspas pode ser modificada pelo shell antes mesmo de o cURL vê-la.

Conectando por meio de um proxy HTTPS

Alguns provedores fazem a conexão até o proxy via TLS, e não apenas a conexão do proxy até o destino. Isso é diferente de acessar um site HTTPS — o protocolo do proxy e o protocolo do destino são variáveis independentes. Para especificar isso:

curl -x "https://user:pwd@proxy.example:8080" "https://httpbin.org/ip"

Se aparecer um erro de certificado aqui, resista à tentação de simplesmente colocar -k e seguir em frente. Essa flag desativa totalmente a verificação de certificado SSL, o que até pode servir para um teste local rápido, mas é uma péssima ideia para qualquer coisa que toque produção ou dados reais de usuários. Se você estiver lidando com um proxy corporativo que intercepta TLS (uma configuração MITM, comum em ambientes empresariais), a correção certa é importar o certificado CA do proxy, e não desligar a verificação.

Autenticação com --proxy-user

Você também pode separar as credenciais em uma flag própria, em vez de colocá-las na URL:

curl -x "http://proxy.example:8080" --proxy-user "user:pwd" "https://httpbin.org/ip"

Repare que o -U maiúsculo não é o mesmo que a autenticação do site de destino (-u / --user, em minúsculo) — confundir esses dois é uma forma fácil de mandar sua senha de proxy para o destino errado. Em ambientes corporativos que usam NTLM ou Digest em vez de Basic, adicione --proxy-ntlm ou --proxy-digest junto com --proxy-user.

Como usar cURL com proxy SOCKS: SOCKS4 vs. SOCKS5 vs. socks5h

HTTP and SOCKS proxy routing with local and remote DNS

Proxies SOCKS operam em um nível mais baixo que proxies HTTP — eles não se importam com o protocolo que você está tunelando, o que os torna úteis para tráfego não HTTP, circuitos Tor e qualquer situação sensível à privacidade. Muitos guias concorrentes resumem isso em um comando e pronto. Isso é um erro, porque as diferenças entre SOCKS4, SOCKS5 e socks5h:// realmente importam.

RecursoSOCKS4SOCKS5socks5h://
Suporte a TCPSimSimSim
Suporte a UDPNãoSimSim
AutenticaçãoNãoSimSim
Resolução remota de DNSNãoNão (DNS local)Sim (o proxy resolve)
Compatível com TorNãoArriscado (vazamento de DNS)Sim

A linha da resolução de DNS é a que realmente pega muita gente. Com socks5://, sua máquina resolve o hostname antes de entregar a conexão ao proxy — o que significa que seu resolvedor DNS local (e, por extensão, seu provedor de internet) vê exatamente qual domínio você está tentando acessar, mesmo que o tráfego HTTP real passe pelo proxy. O socks5h:// corrige isso ao fazer o proxy resolver o hostname, evitando qualquer vazamento local sobre o destino. É por isso que a documentação do Tor insiste em socks5h:// — usar socks5:// puro compromete uma boa parte do anonimato que o Tor deveria oferecer.

Veja cada variação no cURL:

curl --socks4 "proxy.example:1080" "http://example.com"
curl -x "socks5://user:pwd@proxy.example:1080" "http://example.com"
curl -x "socks5h://user:pwd@proxy.example:1080" "http://example.com"

A menos que você tenha um motivo específico para não fazer isso, use socks5h:// por padrão. Não custa nada a mais e elimina um vazamento que você provavelmente nunca perceberia.

Definindo proxy com variáveis de ambiente (e evitando as armadilhas)

Colocar -x em cada comando fica cansativo muito rápido. Variáveis de ambiente permitem definir o proxy uma vez por sessão de shell e fazer com que todas as chamadas seguintes do cURL herdem essa configuração automaticamente — o manual do cURL documenta http_proxy, HTTPS_PROXY, ALL_PROXY e NO_PROXY como o conjunto suportado.

O básico

export http_proxy="http://user:pwd@proxy.example:8080"
export HTTPS_PROXY="http://user:pwd@proxy.example:8080"
export ALL_PROXY="socks5h://proxy.example:1080"

Aqui está o ponto que confunde as pessoas o tempo todo: o nome da variável se refere ao protocolo da URL de destino, não ao protocolo do proxy. Então http_proxy controla requisições para URLs http://, e HTTPS_PROXY controla requisições para URLs https:// — você pode apontar ambas para o mesmo servidor proxy HTTP, e isso é totalmente normal.

Ignorando com NO_PROXY

export NO_PROXY="localhost,127.0.0.1,.internal.example"

Separado por vírgulas, e o ponto inicial em .internal.example funciona como curinga para qualquer subdomínio. NO_PROXY sobrepõe o resto — mesmo que -x esteja definido explicitamente na linha de comando, uma correspondência em NO_PROXY vai ignorar o proxy para aquela requisição.

As armadilhas que realmente pegam as pessoas

  • Esquecer export. Se você apenas digitar http_proxy=http://... sem export, a variável fica somente no shell atual e é totalmente invisível para o cURL como processo filho. Na minha experiência, esse é o motivo mais comum por trás de chamados do tipo “o proxy não está funcionando”.
  • Sensibilidade a maiúsculas e minúsculas. O cURL verifica especificamente primeiro a variável em minúsculas http_proxy e dá prioridade a ela se ambas as versões existirem. Algumas outras ferramentas só leem a versão em maiúsculas. Se você estiver depurando por que uma variável “não está sendo lida”, procure uma duplicata com capitalização diferente.
  • A armadilha do alias do PowerShell. No PowerShell 5.1, digitar curl não chama o cURL de verdade — ele executa Invoke-WebRequest, uma ferramenta completamente diferente, com flags diferentes. Se sua flag -x estiver gerando erros estranhos no Windows, digite curl.exe explicitamente para garantir que você está de fato executando o cURL.
  • Diferenças de sintaxe no Windows. No CMD, usa-se set http_proxy=...; no PowerShell, usa-se $env:http_proxy = "...". Misturar essas sintaxes entre sessões de terminal é uma maneira fácil de perder uma tarde.
  • Variáveis antigas. unset http_proxy e unset https_proxy limpam uma configuração de proxy obsoleta que está encaminhando — e falhando — silenciosamente em todas as requisições.

Para alternar rapidamente, alguns aliases no seu .bashrc economizam bastante tempo:

alias proxyon='export http_proxy="http://proxy.example:8080"; export https_proxy="http://proxy.example:8080"'
alias proxyoff='unset http_proxy; unset https_proxy'

Fazendo o cURL usar proxy sempre (arquivo de configuração)

Se você fica atrás de um proxy corporativo em 95% do tempo, um arquivo .curlrc (em sistemas Unix-like, na sua pasta pessoal) ou _curlrc (no Windows, na pasta app-data) define um padrão persistente sem mexer em variáveis de ambiente:

proxy="http://proxy.example:8080"

Para qualquer requisição pontual em que você precise ignorá-lo, --noproxy "*" sobrepõe a configuração apenas para aquela execução. A precedência normalmente segue: flag na linha de comando > variável de ambiente > arquivo de configuração, então -x na linha de comando sempre vence em caso de conflito.

Uma cautela importante: não coloque uma senha em texto puro dentro do .curlrc se esse arquivo estiver em um lugar que possa ser sincronizado, fazer backup ou ser enviado por engano a um repositório. Para pipelines de CI, use o gerenciador de segredos da sua plataforma e injete as credenciais como variáveis de ambiente mascaradas.

Como verificar se o proxy realmente está funcionando

Esta é a parte que quase todos os outros guias pulam — e a que mais economiza tempo de depuração. Configurar um proxy e assumir que ele está roteando o tráfego é como passar horas resolvendo problemas em um scraper que nunca usou proxy de verdade.

Método 1: comparar o IP de saída

Execute a mesma requisição de eco de IP duas vezes — uma direta e outra via proxy — e compare:

curl https://httpbin.org/ip
curl -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip

Se os dois comandos retornarem o mesmo endereço IP, seu proxy não está fazendo nada. Verifique a sintaxe da flag, suas variáveis de ambiente ou se NO_PROXY está correspondendo ao destino por engano.

Método 2: ler a saída detalhada

Adicione -v a qualquer requisição com proxy e o cURL vai imprimir o handshake completo:

curl -v -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip

Procure por uma linha como * Connected to proxy.example (xx.xx.xx.xx) port 8080, seguida de > CONNECT httpbin.org:443 HTTP/1.1 e, por fim, < HTTP/1.1 200 Connection established. Essa sequência — conectar ao proxy e depois abrir o túnel CONNECT até o destino — é o método HTTP CONNECT em ação, exatamente o que deve acontecer quando um destino HTTPS é roteado por um proxy HTTP. Se a linha CONNECT nunca aparecer, a flag de proxy não está sendo aplicada. Um cuidado aqui: use -v apenas enquanto estiver depurando ativamente e oculte a saída antes de compartilhar em qualquer lugar — o modo verboso pode exibir credenciais do proxy em texto puro.

Método 3: comparar lado a lado

Para testes geográficos, salve as duas saídas em arquivos e compare com diff:

curl https://httpbin.org/ip > direct.json
curl -x "http://user:pwd@proxy.example:8080" https://httpbin.org/ip > proxied.json
diff direct.json proxied.json

Se os corpos da resposta (ou os cabeçalhos, no caso de conteúdo com restrição geográfica) forem diferentes, você terá confirmação visual de que o proxy realmente alterou o caminho da sua rede — uma maneira rápida e de baixo esforço de encerrar qualquer dúvida antes de investigar mais a fundo.

Solução de problemas de erros comuns de proxy no cURL

Common cURL proxy error codes and troubleshooting paths

A maioria dos guias faz rodeios aqui e menciona -k uma vez. Esse assunto merece uma tabela de referência de verdade.

ErroCausa provávelCorreção
curl: (7) Failed to connectHost/porta do proxy incorretos, ou o proxy está fora do arVerifique o endereço; teste a conectividade bruta com telnet host port ou nc -zv host port
407 Proxy Authentication RequiredCredenciais do proxy ausentes ou incorretasAdicione --proxy-user user:pass; veja se o provedor exige NTLM/Digest/Negotiate em vez de Basic
curl: (56) Recv failure: Connection reset by peerO proxy derrubou a conexão no meio da transferênciaVerifique a estabilidade do proxy com o provedor; se for um proxy que encerra TLS, confirme o tratamento de certificados em vez de desativá-lo na marra
curl: (28) Connection timed outFirewall bloqueando, proxy obsoleto ou porta erradaExecute env | grep -i proxy para verificar variáveis sobrando; remova as antigas; teste uma requisição direta para isolar a causa
Falha na verificação de certificadoCertificado do proxy não confiável ou que intercepta a conexãoObtenha a cadeia CA correta e use --proxy-cacert; evite desativar a verificação fora de um diagnóstico pontual

A primeira ação universal para qualquer um desses casos é adicionar -v. Isso mostra exatamente onde a conexão está quebrando — resolução de DNS, conexão TCP, handshake TLS ou troca de autenticação com o proxy — em vez de deixar você adivinhar com base em um código de três dígitos.

Para proxies corporativos especificamente, --proxy-ntlm e --proxy-negotiate cobrem esquemas de autenticação de domínios Windows. Uma coisa que o cURL realmente não lida nativamente: arquivos PAC (scripts de Proxy Auto-Config que algumas empresas usam para atribuir proxies dinamicamente). Se a sua empresa usa um, você vai precisar extrair manualmente o host e a porta reais do proxy — normalmente nas configurações de rede do navegador — já que o cURL não tem um parser PAC embutido.

Quando cURL + proxy não é suficiente

cURL com proxy lida muito bem com HTML estático, chamadas de API REST e buscas simples de dados. Onde ele perde força é nas defesas preferidas da web moderna: aplicações de página única renderizadas por JavaScript, sistemas anti-bot como Cloudflare ou Akamai e barreiras de CAPTCHA. Se você apontar o cURL para um app em React ou Vue atrás de uma dessas proteções, vai receber de volta um <div id="root"></div> vazio — tecnicamente uma requisição bem-sucedida, na prática, dados inúteis. Isso não é um bug do cURL. Ele simplesmente não é um navegador e nunca fingiu ser.

Se você já se sente confortável rodando cURL no terminal e chegou a esse limite, o próximo passo natural não é trocar para uma pilha totalmente diferente — é adicionar uma camada que cuide da renderização e da estrutura para você. É exatamente essa lacuna que as ferramentas de desenvolvedor da Thunderbit foram criadas para preencher.

CenáriocURL + ProxyAPI da Thunderbit (POST /extract)
Página HTML estáticaFunciona perfeitamenteFunciona e ainda retorna dados estruturados
SPA renderizada por JSRetorna HTML vazio/parcialrenderMode: "full" lida com o JS
Anti-bot / CAPTCHABloqueadoTratamento embutido
Saída de dados estruturadosHTML bruto — você precisa analisarJSON com seu próprio esquema
Lote (100+ URLs)Loop manual + sua própria limitação de taxaPOST /batch/extract

A Open API da Thunderbit expõe um endpoint /extract que devolve JSON alinhado ao esquema diretamente de páginas pesadas em JavaScript, e um endpoint /distill para conversão limpa em Markdown — ambos podem ser chamados da mesma sessão de terminal em que você já vinha executando comandos cURL. Há também um servidor MCP para assistentes de programação com IA, como Claude ou Cursor, e uma CLI (npx @thunderbit/thunderbit-cli extract <url> --schema fields.json) se você preferir permanecer totalmente em scripts. Nada disso substitui o cURL nas tarefas em que ele é excelente — apenas assume o ponto em que o cURL estruturalmente não consegue avançar. Se você quiser uma visão mais ampla de onde a extração assistida por IA se encaixa em relação a escrever sua própria lógica de scraping, nosso panorama sobre web scraping com IA e a comparação das melhores ferramentas de web scraping com IA cobrem isso com mais profundidade, e nosso artigo sobre web scraping sem código é uma boa introdução se você vem mais do lado de negócios do que de engenharia.

Conclusão

Fazer cURL e proxy conversarem corretamente não é difícil quando você entende onde realmente estão os pontos de falha — e, no fim das contas, quase nenhum deles está no proxy em si. Esquecer export. Confundir -u com -U. Usar socks5:// quando queria socks5h://. Rodar o alias curl do PowerShell em vez de curl.exe. Cada um desses casos gera um erro confuso e genérico que não tem nada a ver com o provedor de proxy.

O hábito que mais economiza tempo: verifique antes de sair depurando. Faça o teste de eco de IP, dê uma olhada na saída de -v, confirme se o proxy realmente está no caminho da requisição antes de assumir que algo quebrou depois. E quando o seu destino começar a devolver JavaScript em vez de HTML limpo, isso não é um problema de cURL a ser resolvido com mais flags — é um sinal para usar uma ferramenta construída para renderização, como a API da Thunderbit, que oferece um plano gratuito se você quiser ver na prática a diferença entre receber JSON e receber HTML bruto.

Perguntas frequentes

O cURL usa proxy por padrão?
Não. A menos que você tenha definido variáveis de ambiente http_proxy / HTTPS_PROXY ou configurado um arquivo .curlrc, o cURL se conecta diretamente ao destino, sem proxy.

Como faço para impedir o cURL de usar proxy em uma única requisição?
Adicione --noproxy "*" a esse comando específico. Para limpar isso em toda a sessão do shell, execute unset http_proxy && unset https_proxy.

Posso usar cURL com proxies rotativos?
Sim — se o seu provedor oferecer um gateway rotativo (um endpoint único que atribui um IP novo a cada requisição), basta apontar -x para esse endereço como qualquer outro proxy. Para lógicas de rotação mais complexas em destinos renderizados por JS, uma camada de API como a da Thunderbit cuida internamente da rotação e da proteção anti-bot, então você não precisa gerenciar a lógica de repetição manualmente.

Por que socks5:// vaza minhas requisições DNS, mas socks5h:// não?
Com socks5://, sua máquina local resolve o hostname de destino antes de enviar a solicitação de conexão ao proxy — o que significa que o resolvedor DNS do seu provedor vê o domínio que você está visitando. O socks5h:// transfere a resolução do hostname para o próprio proxy, então nada sobre o destino fica visível localmente.

É legal usar cURL com proxy?
Usar proxy é legal na maioria das jurisdições, por si só. O que importa é o que você faz com ele — sempre respeite os termos de serviço do site-alvo, o robots.txt quando aplicável e qualquer lei de privacidade de dados relevante. Este guia cobre apenas a mecânica técnica, não um aval jurídico para qualquer caso de uso específico.

Saiba mais

Ke
Ke
CTO na Thunderbit | Cientista de Dados Sênior e Especialista em ML Com quase uma década de experiência em machine learning e data science, Ke Shen é ex-aluno da Columbia University e foi Cientista de Dados Sênior na Walmart Labs. Com profunda experiência, reconhecida pelos pares, em Python, R, Java e Estatística, ele compartilha insights testados em batalha sobre como levar algoritmos complexos de IA da teoria à arquitetura pronta para produção.
Topics
proxy cURLproxy SOCKS5solução de problemas de proxy
Sumário
Thunderbit · Agente de dados web com IA

Extraia dados de qualquer página em 1 clique

Aprovado por mais de 250.000 usuários
plano gratuito disponível
Da página web para a planilha
Descreva o que você precisa — o Agente de IA da Thunderbit extrai e exporta para Excel, Google Sheets, Airtable ou Notion. Comece grátis.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week