curl Com Proxy: Sintaxe -x, Autenticação, SOCKS5 e Receitas de Debug
Uma flag direciona o curl através de qualquer proxy — então a autenticação, túneis CONNECT, DNS SOCKS5 e variáveis de ambiente decidem se realmente funciona. Todas as receitas que você precisa, prontas para colar.
Usar curl com um proxy é uma única flag: -x. Mas entre essa flag e um comando de scraping funcional existem cinco detalhes que geram a maior parte do tráfego no Stack Overflow sobre o assunto — sintaxe de credenciais, túneis CONNECT, comportamento do DNS SOCKS5, variáveis de ambiente que silenciosamente sequestram requests e códigos de erro que parecem iguais até você ler a saída detalhada. Esta é a referência completa, para copiar e colar: todas as variantes de sintaxe, todos os métodos de autenticação e as receitas que você realmente reutilizará.
A flag -x: sintaxe de proxy curl
# route one request through an HTTP proxy
curl -x http://gate.quantumproxies.io:8000 https://ifconfig.me
# identical, long form
curl --proxy http://gate.quantumproxies.io:8000 https://ifconfig.me
Dois padrões que valem a pena conhecer, direto da documentação do curl: se você omitir o esquema, o curl assume um proxy HTTP, e se você omitir a porta, ele assume 1080 — uma escolha puramente histórica que não corresponde a quase nenhum proxy real, então sempre escreva a porta explicitamente. O prefixo do esquema seleciona o protocolo do proxy: http:// para um proxy HTTP padrão, https:// para criptografar o salto até o próprio proxy, socks5:// ou socks5h:// para SOCKS.
autenticação de proxy curl: três maneiras de enviar credenciais
# 1) credentials inline in the proxy URL
curl -x http://USER:PASS@gate.quantumproxies.io:8000 https://ifconfig.me
# 2) separate flag -- keeps the URL readable
curl -x http://gate.quantumproxies.io:8000 -U USER:PASS https://ifconfig.me
# 3) special characters must be percent-encoded (p@ss! -> p%40ss%21)
curl -x "http://USER:p%40ss%21@gate.quantumproxies.io:8000" https://ifconfig.me
-U (maiúsculo) é a autenticação de proxy; -u minúsculo autentica contra o site alvo — confundi-los é o erro clássico. Um 407 Proxy Authentication Required sempre significa que o proxy rejeitou suas credenciais, nunca o alvo. Verifique erros de digitação, símbolos não codificados ou um provedor que espera autenticação por lista de IPs em vez de usuário:senha. Com proxies residenciais QuantumProxies ambos os modos funcionam — liste o IP da sua máquina e elimine completamente as credenciais, ou insira usuário:senha na URL. A lista completa de verificação 407 está em nosso guia de solução de problemas 407.

Alvos HTTPS e o túnel CONNECT
Quando a URL alvo é https://, o curl não pede ao proxy para buscar a página. Ele envia um pedido CONNECT host:443, o proxy abre um túnel TCP bruto, e o curl realiza o handshake TLS diretamente com o alvo através dele. É por isso que um proxy HTTP pode transportar tráfego HTTPS sem quebrar a criptografia — ele encaminha o texto cifrado que não pode ler ou modificar. Na saída -v você verá a linha CONNECT seguida por 200 Connection established; qualquer outra coisa nesse passo é o ponto de falha. Para protocolos não HTTP através de um proxy HTTP, -p (--proxytunnel) força o mesmo comportamento de túnel.
SOCKS5: um caractere muda onde o DNS acontece
# SOCKS5, hostname resolved on YOUR machine
curl -x socks5://USER:PASS@gate.quantumproxies.io:1080 https://ifconfig.me
# SOCKS5h, hostname resolved BY THE PROXY -- use this for scraping
curl -x socks5h://USER:PASS@gate.quantumproxies.io:1080 https://ifconfig.me
# dedicated flag, same as socks5h
curl --socks5-hostname gate.quantumproxies.io:1080 -U USER:PASS https://ifconfig.me
Com socks5:// simples, sua máquina realiza a consulta DNS localmente — o nome do host alvo vaza para seu resolvedor local, e você pode obter um IP que não corresponde geograficamente à sua saída. socks5h:// empurra a resolução para o proxy, então as respostas DNS vêm da rede de saída. Todo plano QuantumProxies inclui SOCKS5 junto com HTTP no mesmo gateway. Se você não tem certeza de qual protocolo uma ferramenta precisa, nossa comparação SOCKS5 vs HTTP explica.

Variáveis de ambiente e .curlrc
# proxy every curl (and most CLI tools) in this shell
export http_proxy="http://USER:PASS@gate.quantumproxies.io:8000"
export https_proxy="http://USER:PASS@gate.quantumproxies.io:8000"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
curl https://ifconfig.me # proxied automatically
curl --noproxy "*" https://ifconfig.me # bypass for one call
# permanent default: add to ~/.curlrc
# proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
Uma peculiaridade documentada na página de manual do curl eventualmente pega todos: as variáveis podem ser maiúsculas ou minúsculas e minúsculas vencem, exceto http_proxy, que o curl honra apenas em minúsculas — HTTP_PROXY é deliberadamente ignorado por razões de segurança. No Windows, a sintaxe -x é idêntica no cmd e no PowerShell; defina variáveis com set http_proxy=... ou $env:http_proxy="...", e o arquivo de configuração é %APPDATA%\_curlrc. Lembre-se de que essas variáveis afetam outras ferramentas também — uma exportação esquecida em CI é uma fonte clássica de tráfego misterioso.
Depuração com -v: leia o handshake, não as folhas de chá
Adicione -v e o curl narra toda a conversa com o proxy. Combine o que você vê com a causa:
Connected to gate.quantumproxies.io— você alcançou o proxy; qualquer falha após isso é de autenticação ou do lado do alvo.curl: (7) Failed to connect— host/porta errados, proxy inativo ou um firewall bloqueando a porta antes que o proxy responda.407 Proxy Authentication Required— credenciais ausentes, erradas ou caracteres especiais não codificados na URL.curl: (56) CONNECT aborted— o proxy recusou o túnel, geralmente porque a porta alvo não é permitida (a maioria dos proxies permite 443 e pouco mais).- O túnel abre mas o site retorna 403 — é o alvo bloqueando você, não o proxy; teste a saída com o verificador de qualidade de IP gratuito e veja por que o curl recebe 403 enquanto um navegador passa sem problemas.
Teste o proxy antes de confiar nele
Dois testes de trinta segundos economizam horas de depuração confusa depois. Primeiro, confirme o anonimato: acesse https://httpbin.org/headers através do proxy e inspecione o que o alvo realmente recebe — um gateway limpo não adiciona cabeçalhos Via ou X-Forwarded-For que anunciariam o uso de proxy, enquanto proxies baratos ou gratuitos frequentemente injetam ambos. Segundo, meça a sobrecarga com variáveis de tempo -w (receita abaixo): um salto residencial normalmente adiciona algumas centenas de milissegundos em comparação a uma solicitação direta, o que é normal; tempos de conexão de vários segundos significam uma saída congestionada que vale a pena rotacionar. Incorpore ambos os testes no CI para qualquer pipeline que dependa de proxies, e você detectará um endpoint mal configurado antes que ele silenciosamente queime uma execução de scraping — ou seu orçamento de largura de banda, já que a cobrança de uso é por GB, independentemente de as respostas terem sido úteis ou não.
Receitas rápidas
# confirm the exit IP
curl -x http://USER:PASS@gate.quantumproxies.io:8000 https://ifconfig.me
# geo-target: choose the exit country in the username
curl -x "http://USER-country-de:PASS@gate.quantumproxies.io:8000" https://ifconfig.me
# sticky session: keep the same exit IP across calls
curl -x "http://USER-session-a1b2c3:PASS@gate.quantumproxies.io:8000" https://example.com
# POST JSON through the proxy
curl -x http://USER:PASS@gate.quantumproxies.io:8000 \
-H "Content-Type: application/json" -d '{"q":"test"}' https://httpbin.org/post
# fetch a page: follow redirects, browser UA, save to file
curl -x http://USER:PASS@gate.quantumproxies.io:8000 -L -A "Mozilla/5.0" \
-o page.html https://example.com
# measure the proxy overhead
curl -x http://USER:PASS@gate.quantumproxies.io:8000 -s -o /dev/null \
-w "connect: %{time_connect}s total: %{time_total}s\n" https://example.com
Os truques de sufixo de nome de usuário funcionam porque o gateway analisa o direcionamento a partir das credenciais: seleção de país em mais de 200 locais, rotação por solicitação por padrão, sessões persistentes quando um fluxo precisa de uma identidade. Quando seus comandos de uma linha crescem para um script, o mesmo endpoint se encaixa diretamente no Python — nosso guia de proxy Python Requests continua exatamente de onde o curl parou.
Perguntas frequentes
Como uso um proxy SOCKS5 com curl?
Passe-o para -x com um esquema SOCKS: curl -x socks5h://user:pass@host:port https://target. Prefira socks5h:// sobre socks5:// para que o DNS seja resolvido no proxy em vez de na sua máquina. As flags mais antigas --socks5 e --socks5-hostname ainda funcionam e fazem a mesma coisa.
Como faço para o curl ignorar o proxy?
Para uma solicitação, adicione --noproxy "*". Para um shell, desfaça http_proxy e https_proxy. Para isentar hosts específicos permanentemente, liste-os em NO_PROXY como domínios separados por vírgula. Se o curl estiver usando proxy quando você nunca pediu, uma variável de ambiente ou uma linha em ~/.curlrc é quase certamente o culpado.
Por que o curl retorna 407 Proxy Authentication Required?
O proxy rejeitou suas credenciais. Verifique usuário e senha, confirme que você usou -U (não -u, que visa o site), e codifique percentualmente caracteres especiais como @ ou !. Se seu provedor autentica por lista de IPs, autorize o IP da sua máquina no painel e não envie credenciais.
A sintaxe de proxy curl funciona no Windows?
Sim — -x, -U e os esquemas SOCKS são idênticos, já que o curl vem com o Windows 10 e posteriores. Apenas o ambiente difere: defina variáveis com set no cmd ou $env: no PowerShell, e use %APPDATA%\_curlrc em vez de ~/.curlrc para configurações permanentes.
Como configuro um proxy permanente para o curl?
Adicione uma linha proxy = "http://user:pass@host:port" em ~/.curlrc (ou _curlrc no Windows) e toda invocação do curl o usará. Alternativamente, exporte http_proxy e https_proxy do seu perfil de shell para cobrir outras ferramentas também. O comando de linha -x sempre substitui ambos, então exceções pontuais permanecem fáceis.
Esse é todo o escopo: -x mais um esquema, credenciais codificadas corretamente, socks5h quando você usa SOCKS, variáveis de ambiente que você define deliberadamente, e -v sempre que algo se comporta mal. Os comandos acima rodam como estão contra qualquer gateway — combine-os com saídas residenciais limpas e o curl se torna uma ferramenta de scraping genuinamente capaz.