Pular para o conteúdo
Guides 6 min de leitura 1030 visualizações

Usando proxy com cURL

Este artigo detalha como usar proxies com o cURL de forma eficaz. Veja exemplos de comandos para requisições web seguras, anônimas e eficientes.

Usando proxy com cURL

Usar um proxy com o cURL consiste em informar o endereço e a porta do servidor proxy pela opção de linha de comando -x ou --proxy, permitindo rotear as requisições do cURL por um servidor intermediário.

Este artigo detalha os vários métodos e opções de linha de comando disponíveis no cURL para trabalhar com serviços de proxy, cobrindo proxies HTTP/HTTPS básicos, proxies com autenticação, proxies SOCKS e a configuração por variáveis de ambiente.

Configuração básica de proxy

O método mais comum de instruir o cURL a usar um proxy é a opção -x ou --proxy, seguida do endereço e da porta do servidor proxy.

Proxy HTTP/HTTPS

Para rotear uma requisição HTTP ou HTTPS por um proxy HTTP/HTTPS, informe o endereço e a porta do proxy.

Sintaxe:

curl -x [protocol://][user:password@]proxyhost[:port] [URL]

Exemplos:

  1. Usando um proxy HTTP para um destino HTTP:
    bash curl -x http://your.proxy.server:8080 http://example.com
    Este comando faz o cURL enviar a requisição para http://example.com através de your.proxy.server na porta 8080 usando o protocolo de proxy HTTP.

  2. Usando um proxy HTTP para um destino HTTPS:
    bash curl -x http://your.proxy.server:8080 https://secure.example.com
    Ao passar um destino HTTPS por um proxy HTTP, o cURL normalmente usa o método CONNECT para estabelecer um túnel através do proxy até o servidor de destino. O handshake SSL/TLS ocorre então diretamente entre o cURL e secure.example.com, sem envolver o proxy HTTP na criptografia.

  3. Usando um proxy HTTPS para um destino HTTP:
    bash curl -x https://your.secure.proxy.server:8443 http://example.com
    Isso roteia a requisição por um proxy que usa HTTPS. A conexão entre o cURL e your.secure.proxy.server é criptografada.

Proxies com autenticação

Muitos serviços de proxy exigem autenticação. O cURL suporta vários métodos de autenticação para proxies, principalmente Basic, NTLM e Digest.

Autenticação Basic

Para proxies que exigem usuário e senha, use a opção --proxy-user ou embuta as credenciais diretamente na URL do proxy.

Sintaxe:

curl -x [protocol://]proxyhost[:port] --proxy-user "username:password" [URL]
curl -x [protocol://]username:password@proxyhost[:port] [URL]

Exemplos:

  1. Usando --proxy-user:
    bash curl -x http://your.proxy.server:8080 --proxy-user "proxyuser:proxypass" http://example.com

  2. Embutindo as credenciais na URL:
    bash curl -x http://proxyuser:[email protected]:8080 http://example.com
    É obrigatório codificar em URL os caracteres especiais do usuário ou da senha, caso existam. Por exemplo, a senha p@ssword deve virar p%40ssword.

Outros métodos de autenticação

Embora a autenticação Basic seja a mais comum, o cURL suporta outros métodos para ambientes específicos.

  • --proxy-ntlm: ativa a autenticação NTLM no proxy.
  • --proxy-digest: ativa a autenticação Digest no proxy.

Exemplo (NTLM):

curl -x http://your.proxy.server:8080 --proxy-ntlm --proxy-user "DOMAIN\proxyuser:proxypass" http://example.com

Proxies SOCKS

Os proxies SOCKS (Socket Secure) operam em um nível mais baixo que os proxies HTTP e lidam com diversos protocolos de rede. O cURL suporta SOCKS4, SOCKS4a e SOCKS5.

Proxy SOCKS5

O SOCKS5 é o protocolo SOCKS mais versátil, com suporte a IPv4, IPv6, UDP e autenticação.

Sintaxe:

curl --socks5 [user:password@]proxyhost[:port] [URL]

Exemplos:

  1. Proxy SOCKS5 básico:
    bash curl --socks5 your.socks5.server:1080 http://example.com
    Por padrão, o cURL resolve o hostname example.com localmente antes de enviar o endereço IP ao proxy SOCKS5.

  2. Proxy SOCKS5 com resolução DNS remota:
    bash curl --socks5-hostname your.socks5.server:1080 http://example.com
    A opção --socks5-hostname faz o cURL enviar o hostname example.com ao proxy SOCKS5, permitindo que o proxy execute a resolução DNS. Isso é essencial para o anonimato e para contornar restrições geográficas, já que a resolução DNS local pode revelar sua localização.

  3. Proxy SOCKS5 com autenticação:
    bash curl --socks5-hostname socksuser:[email protected]:1080 http://example.com

Proxy SOCKS4/SOCKS4a

O SOCKS4 é um protocolo mais antigo, voltado principalmente a IPv4, e não suporta autenticação. O SOCKS4a estende o SOCKS4 para permitir que o proxy resolva hostnames.

Sintaxe:

curl --socks4 proxyhost[:port] [URL]
curl --socks4a proxyhost[:port] [URL]

Exemplo (SOCKS4a):

curl --socks4a your.socks4.server:1080 http://example.com

De forma semelhante a --socks5-hostname, o --socks4a garante que o proxy resolva o hostname de destino.

Destinos HTTPS via proxy com SSL/TLS

Quando o cURL envia uma requisição HTTPS por um proxy HTTP, ele inicia uma requisição CONNECT ao proxy. O proxy então estabelece um túnel TCP até o servidor HTTPS de destino. O cURL executa o handshake SSL/TLS diretamente com o servidor de destino através desse túnel.

Verificação de certificado SSL

Por padrão, o cURL verifica o certificado SSL do servidor de destino. Se o certificado for inválido, estiver expirado ou for autoassinado, o cURL aborta a conexão.

  • --insecure ou -k: desativa a verificação do certificado SSL. Use com cautela, principalmente em testes ou em ambientes confiáveis conhecidos com certificados autoassinados.
    bash curl -x http://your.proxy.server:8080 https://self-signed.example.com -k

  • --cacert [file]: informa um bundle de certificados CA personalizado para a verificação.
    bash curl -x http://your.proxy.server:8080 https://secure.example.com --cacert /path/to/custom_ca.pem

Variáveis de ambiente para configuração de proxy

O cURL também pode obter as configurações de proxy a partir de variáveis de ambiente. Isso é útil para configurações de proxy válidas para todo o sistema ou toda a sessão, sem precisar informar a opção -x em cada comando.

Variáveis de ambiente comuns

  • http_proxy: proxy para requisições HTTP.
  • https_proxy: proxy para requisições HTTPS.
  • all_proxy: proxy de fallback para todos os protocolos, caso http_proxy ou https_proxy não estejam definidos.
  • no_proxy: lista separada por vírgulas de hostnames, domínios ou endereços IP que devem ignorar o proxy.

Sintaxe:

export http_proxy="http://your.proxy.server:8080"
export https_proxy="http://your.proxy.server:8080" # Nota: em geral, usa-se um proxy HTTP para destinos HTTPS
export no_proxy="localhost,127.0.0.1,.localdomain"

Exemplos:

  1. Definindo o proxy HTTP:
    bash export http_proxy="http://proxyuser:[email protected]:8080" curl http://example.com

  2. Definindo o proxy HTTPS (via proxy HTTP):
    bash export https_proxy="http://your.proxy.server:8080" curl https://secure.example.com

  3. Ignorando o proxy para hosts específicos:
    bash export http_proxy="http://your.proxy.server:8080" export no_proxy="internal.example.com" curl http://internal.example.com # Esta requisição vai ignorar o proxy curl http://external.example.com # Esta requisição vai usar o proxy

Precedência

As opções de linha de comando têm precedência sobre as variáveis de ambiente. Se -x for informado, ele sobrepõe qualquer variável de ambiente http_proxy, https_proxy ou all_proxy.

Diagnóstico de conexões via proxy

Ao enfrentar problemas com cURL e proxies, várias opções ajudam no diagnóstico.

  • --verbose ou -v: fornece informações detalhadas sobre a requisição e a resposta, incluindo tentativas de conexão ao proxy, cabeçalhos e negociação SSL/TLS. Costuma ser o primeiro passo na depuração.
    bash curl -v -x http://your.proxy.server:8080 http://example.com

  • --trace [file]: grava em um arquivo um trace completo de todos os dados de entrada e saída, incluindo cabeçalhos e corpo.
    bash curl --trace debug.log -x http://your.proxy.server:8080 http://example.com

  • Logs do servidor proxy: verifique os logs do seu servidor proxy em busca de tentativas de conexão, falhas de autenticação ou mensagens de erro relacionadas às suas requisições cURL.

  • Conectividade de rede: confirme que a máquina que executa o cURL consegue alcançar o servidor proxy na porta informada usando ferramentas como ping, telnet ou netcat.
    bash telnet your.proxy.server 8080
    Uma conexão telnet bem-sucedida indica alcance básico de rede.

Comparação das principais opções de proxy

Opção do cURL Descrição Protocolos Autenticação Resolução DNS
-x, --proxy Especificação genérica de proxy (proxy HTTP/HTTPS) HTTP, HTTPS Sim Local
--proxy-user Informa usuário e senha para a autenticação no proxy HTTP, HTTPS Sim N/A
--socks5 Proxy SOCKS5, resolução DNS local por padrão Todos Sim Local
--socks5-hostname Proxy SOCKS5, resolução DNS remota Todos Sim Remota (proxy)
--socks4 Proxy SOCKS4, resolução DNS local Todos Não Local
--socks4a Proxy SOCKS4a, resolução DNS remota Todos Não Remota (proxy)
http_proxy (env) Variável de ambiente para o proxy HTTP HTTP Sim Local
https_proxy (env) Variável de ambiente para o proxy HTTPS (em geral, um proxy HTTP em túnel) HTTPS Sim Local
all_proxy (env) Variável de ambiente para todos os protocolos, se as outras não estiverem definidas Todos Sim Local
no_proxy (env) Variável de ambiente para indicar hosts que devem ignorar o proxy N/A N/A N/A
Atualizado: 03.03.2026
Voltar à categoria

Leia também

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.