Uso de proxy com cURL: como testar proxies HTTP e SOCKS5 na linha de comando
Este guia ensina a conectar proxies HTTP e SOCKS5 da Socks5Proxy via cURL, com autenticação, medição de tempo de resposta e script shell para verificar listas inteiras de uma vez.
Por que usar cURL para testar proxies?
O cURL está presente na maioria dos servidores e ambientes de desenvolvimento, sendo a forma mais rápida de verificar proxies. Em problemas com código ou configurações de navegador, testes com cURL ajudam a isolar a causa.
O exemplo usa IP 198.51.100.23, porta HTTP 8000, porta SOCKS5 1080, nome de usuário spx_user e senha spx_pass.
Como conectar a um proxy HTTP?
Use a opção -x (ou --proxy) para inserir o endereço do proxy. O nome de usuário e senha podem ser incluídos no endereço ou separadamente com a opção -U. Ao solicitar um endereço HTTPS, o cURL cria um túnel CONNECT e faz a solicitação criptografada dentro dele.
# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org
# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.orgComo conectar um proxy SOCKS5?
--socks5-hostname resolve nomes de domínio pelo proxy. As solicitações DNS do seu servidor não são expostas e os nomes são resolvidos com base no país do proxy. --socks5 resolve os nomes no seu servidor e envia apenas o IP para o proxy. Na maioria dos casos, recomendamos --socks5-hostname.
O formato socks5h:// também funciona quando inserido em -x.
# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org
# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.orgComo ver tempo de resposta e status juntos?
A opção -w permite exibir o tempo de conexão, tempo até o primeiro byte, tempo total e código de resposta em uma única linha. É útil para comparar a velocidade de proxies em diferentes países ou para determinar se o site de destino ou o proxy está lento.
Use -o /dev/null para descartar o corpo e -s para desativar a exibição de progresso, mostrando apenas o resultado de forma limpa.
curl -s -o /dev/null \
-x http://spx_user:spx_pass@198.51.100.23:8000 \
-w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
https://example.com/Como verificar toda a lista de uma vez?
Para verificar o status de todos os proxies de uma vez, obtenha a lista via API e execute cURL para cada linha. Este script obtém lista no formato ip:port:user:pass e exibe o IP de resposta e tempo para cada linha, com timeout para evitar travamentos.
#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
"https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt
while IFS=: read -r ip port user pass; do
out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
echo "$ip:$port $out"
done < proxies.txtPosso chamar a API via cURL?
Sim. Saldo, lista de planos ativos e lista de proxies podem ser consultados com um único header Authorization: Bearer. Use ferramentas como jq para filtrar campos específicos na resposta JSON.
curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"Também é possível configurar o proxy por variáveis de ambiente?
Sim. cURL e muitas ferramentas de linha de comando leem as variáveis de ambiente http_proxy, https_proxy e all_proxy. Definindo-as no shell, ferramentas como cURL, wget e pip usarão o mesmo proxy. Para SOCKS5, use socks5h:// em all_proxy.
Liste endereços que não devem passar por proxy em no_proxy, separados por vírgulas. Isso evita que servidores internos ou localhost sejam acessados via proxy.
export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org
# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"Como comparar resultados entre proxies HTTP e SOCKS5?
Compare o tempo de resposta e o IP retornado ao solicitar o mesmo endereço pelas duas portas do mesmo IP para ver qual método é mais rápido no seu ambiente. Embora sejam semelhantes, servidores distantes ou DNS lento podem causar diferenças.
O IP de resposta deve ser o mesmo em ambos os métodos. Se for diferente, verifique se você não misturou portas de linhas diferentes na lista.
for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
curl -s -m 15 -x "$p" -w " %{time_total}s\n" https://api.ipify.org
doneComo o servidor verifica os IPs para autorização?
Para autorização por IP, registre o IPv4 público que seu servidor usa para acessar a internet. Execute curl -4 https://api.ipify.org sem proxy para ver esse valor. Registre-o no dashboard para conexão sem usuário/senha.
curl -4 -s https://api.ipify.orgO proxy pode ver o conteúdo de sites HTTPS?
Ao solicitar um endereço HTTPS com um proxy HTTP, o cURL primeiro cria um túnel CONNECT até o servidor de destino e, dentro dele, estabelece uma conexão criptografada diretamente com o servidor de destino. O proxy sabe apenas para qual servidor está se conectando, e o conteúdo trafegado está criptografado e invisível. Use a opção -v para ver o processo CONNECT e a conexão criptografada.
O mesmo se aplica ao SOCKS5. O proxy apenas encaminha a conexão, e a criptografia ocorre entre o cURL e o servidor de destino. Por isso, é mais seguro não usar a opção de verificação de certificado (-k), pois o certificado do servidor de destino ainda será verificado mesmo através do proxy.
Usar --socks5-hostname faz com que o proxy resolva o nome de domínio que você está tentando acessar, então não há registro das solicitações DNS do seu servidor.
curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"Como interpretar mensagens de erro do cURL?
Receber o código HTTP 407 do proxy após CONNECT indica falha de autenticação. Verifique o nome de usuário e senha, ou o IP do servidor registrado na autenticação por IP. Se a senha contiver @ ou :, não a inclua no endereço, use -U ou --proxy-user.
Failed to connect ou Connection timed out ocorre quando a porta está incorreta ou o firewall do servidor bloqueia conexões de saída. Use a porta HTTP para endereços HTTP e a porta SOCKS5 para SOCKS5, e verifique se a porta de saída está aberta. A opção -v exibe o processo de conexão passo a passo, facilitando a identificação da causa.