Resposta rápida
Como usar um proxy com curl?
Use curl -x http://USERNAME:[email protected]:7777 https://api.ipify.org para proxy HTTP, ou --socks5-hostname gw.crawlrelay.com:7778 com -U USERNAME:PASSWORD para SOCKS5. CrawlRelay proxies residenciais incluem país e sessão fixa no usuário, como USERNAME-country-de-session-t1-ttl-10. A partir de US$ 0,50/GB. Pague com cripto, sem KYC.
Flags do curl que você precisa
-x / --proxy | URL do proxy: http://host:port, credenciais opcionais na URL |
|---|---|
-U / --proxy-user | Credenciais do proxy como USERNAME:PASSWORD, mantidas fora da URL |
--socks5-hostname | Proxy SOCKS5 com DNS resolvido na saída |
-v | Mostra a troca CONNECT e a linha de status do proxy |
-w | Exibe temporização, tamanho e %{http_connect}, o status CONNECT do proxy |
--max-time, --connect-timeout | Limites totais e de tempo de conexão, em segundos |
Quais são os comandos básicos do proxy?
Cada um imprime o IP de saída que o site vê.
# Rotating exit, any country
curl -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://api.ipify.org
# Country and city (city availability varies)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-city-chicago:PASSWORD https://api.ipify.org
# Sticky: run it twice, the IP stays the same for up to 10 minutes (it can change earlier)
curl -x http://gw.crawlrelay.com:7777 -U USERNAME-country-de-session-t1-ttl-10:PASSWORD https://api.ipify.org
# SOCKS5, DNS resolved at the exit
curl --socks5-hostname gw.crawlrelay.com:7778 -U USERNAME-country-gb:PASSWORD https://api.ipify.orgComo depurar uma conexão proxy com curl?
Execute com -v e leia as linhas ao redor de CONNECT. Um túnel funcionando mostra HTTP/1.1 200 Connection established, depois o handshake TLS com o site. Qualquer outro status nessa linha veio do proxy: 407 significa credenciais, 502 ou 504 indica problema no exit ou no alvo. O formato -w abaixo imprime a mesma informação em uma linha, útil em loops e verificações CI.
# Full exchange, including the proxy's answer to CONNECT
curl -v -x http://gw.crawlrelay.com:7777 -U USERNAME:PASSWORD https://example.com/ -o /dev/null
# One line: proxy CONNECT status, HTTP status, compressed bytes and timings
curl -s --compressed -o /dev/null -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD \
-w 'connect=%{http_connect} http=%{http_code} bytes=%{size_download} tcp=%{time_connect}s tls=%{time_appconnect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n' \
https://example.com/Como verificar se rotação e sessões funcionam?
Solicite o IP várias vezes. Sem um ID de sessão, cada execução é uma nova conexão e normalmente mostra IP diferente. Com ID de sessão, o IP deve permanecer o mesmo até o TTL acabar, embora possa mudar antes disso.
echo "rotating:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us:PASSWORD https://api.ipify.org; echo
done
echo "sticky:"
for i in 1 2 3 4 5; do
curl -s -x http://gw.crawlrelay.com:7777 -U USERNAME-country-us-session-loop1-ttl-5:PASSWORD https://api.ipify.org; echo
doneComo usar curl com proxy no Windows?
Use curl.exe, não curl. No PowerShell 5.1 do Windows, curl é um alias para Invoke-WebRequest, que não entende -x ou -U. Windows 10 e 11 incluem o curl real como curl.exe. No PowerShell, coloque entre aspas argumentos com caracteres especiais, e escreva um $ literal em senha dentro de aspas simples.
curl.exe -x http://gw.crawlrelay.com:7777 -U 'USERNAME-country-fr:PASSWORD' https://api.ipify.orgComo configurar o proxy uma vez para todo comando?
curl lê as variáveis de ambiente https_proxy e http_proxy, e muitas outras ferramentas também. Defina para a sessão shell, e use NO_PROXY para hosts que não devem passar pelo proxy, como sua própria API. Evite colocar a senha em variável exportada para processos filhos em máquinas compartilhadas.
export https_proxy="http://USERNAME-country-us:[email protected]:7777"
export http_proxy="$https_proxy"
export NO_PROXY="localhost,127.0.0.1,.internal.example"
curl https://api.ipify.org # now uses the proxy
unset https_proxy http_proxy # back to directcurl e proxies: dúvidas
Qual a diferença entre --socks5 e --socks5-hostname?
Com --socks5, curl resolve o hostname na sua máquina e envia o IP para o proxy. Com --socks5-hostname, ele manda o hostname e o proxy resolve. Use --socks5-hostname para scraping para que as respostas DNS correspondam ao país de saída, e para que seu resolvedor local não veja os domínios acessados.
Por que o curl diz 'CONEXÃO CONNECT falhou, resposta 407'?
O proxy rejeitou as credenciais ou não recebeu. Verifique usuário e senha, encode as especiais na URL -x, ou passe-as via -U. A página de erro 407](/docs/errors/407-proxy-authentication-required/) lista outras causas.
Como vejo quantos bytes uma página consome pelo proxy?
Adicione --compressed -o /dev/null -w '%{size_download}\n'. --compressed faz o curl pedir gzip ou brotli, como seu scraper, e %{size_download} conta bytes comprimidos trafegados. Sem isso, o servidor envia a página sem compressão, e o número pode ser várias vezes maior. Teste em várias páginas reais para estimar tráfego por 1.000 páginas.
Curl pode usar HTTP/2 ou HTTP/3 pelo proxy?
HTTP/2 funciona dentro do túnel CONNECT quando o site suporta, pois o túnel transporta TLS end-to-end. HTTP/3 usa UDP, que túnel CONNECT via proxy HTTP não suporta, portanto use HTTP/2 ou HTTP/1.1.
Teste seus alvos pela linha de comando
US$ 1,50 para 1 GB, suficiente para milhares de testes curl.