Como usar cURL com proxy: comandos e exemplos

Publicado:

4 min de leitura

PXNET
Autor: PXNET
Como usar cURL com proxy

O que é o cURL

O cURL (pronuncia-se "kurl") é uma ferramenta de linha de comando para transferir dados de e para servidores. Com poucas linhas no terminal você move grandes volumes de dados de um servidor para outro.

Como todo comando, o cURL segue uma sintaxe fixa:

curl [opções] [URL]

A parte das "opções" diz o que o comando deve fazer. Desses parâmetros — também chamados de flags — existem cerca de 380. Um dos mais conhecidos é o -o, que grava o conteúdo de uma página em um arquivo.

Como origem ou destino, o cURL precisa de uma URL (Uniform Resource Locator), uma forma específica de identificador uniforme de recursos. Protocolos de rede que não são endereçados por URL não funcionam com o cURL.

Por baixo, o cURL se apoia na biblioteca libcurl, que traz os protocolos aceitos. A libcurl é portável e se comporta igual no Linux, no Windows e no macOS; nesses sistemas costuma vir pré-instalada. Se não estiver, baixe o pacote no site do cURL.

Quais protocolos o cURL aceita

O cURL aceita protocolos que transferem dados nos dois sentidos e são endereçados por URL. HTTP é o padrão; além dele, funciona com:

  • DICT
  • FILE
  • FTP e FTPS
  • GOPHER e GOPHERS
  • IMAP e IMAPS
  • LDAP e LDAPS
  • MQTT
  • POP3 e POP3S
  • RTMP e RTSP
  • SCP e SFTP
  • SMB e SMBS
  • SMTP e SMTPS
  • TELNET
  • TFTP

Por que usar o cURL

O cURL é popular porque é versátil, simples e confiável. Ele baixa páginas inteiras e transfere arquivos em qualquer formato aceito, e ainda faz autenticação de usuário, HTTP POST, Metalink, upload por FTP e uso de proxy em conexões SSL. Some a isso:

  • uma saída detalhada do que foi enviado e recebido, valiosa para depurar
  • suporte a muitos protocolos de rede
  • a possibilidade de indicar várias variações de uma URL em um único comando com chaves
  • o mesmo comportamento em todos os sistemas operacionais usuais

cURL com proxy HTTP ou HTTPS

Para testar, serve bem um serviço que devolva o IP de origem da requisição: se o proxy estiver funcionando, você vê o endereço dele e não o seu.

Os comandos

Abra um terminal e consulte as opções:

bash
curl --help

Na lista aparece, entre outras:

-x, --proxy [protocol://]host[:port]

O x é minúsculo. Os dados do proxy são passados com -x ou com --proxy; as duas formas significam a mesma coisa:

bash
curl -x "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

ou

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

Se aparecerem erros de certificado SSL, acrescente -k em minúsculo. Com isso o cURL aceita conexões não verificadas:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip" -k

A URL do proxy e a de destino ficam entre aspas duplas. Não é por acaso: essa é a forma recomendada para que caracteres especiais na URL não confundam o interpretador de comandos.

O protocolo de proxy padrão é o HTTP, então estes dois comandos fazem exatamente a mesma coisa:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
curl --proxy "user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

cURL com proxy SOCKS

bash
curl -x "socks5://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

Conforme a versão do SOCKS, você escreve socks4://, socks4a://, socks5:// ou socks5h://. Com socks5h:// quem resolve o nome de host é o proxy, e não a sua máquina — em geral a opção recomendada para scraping, já que, do contrário, a consulta DNS sai pela sua própria conexão.

Como alternativa, dá para definir o proxy com --socks5 em vez de -x; nesse caso, usuário e senha vão em --proxy-user.

O cURL é uma ferramenta muito forte para automação e, em suporte a proxy, uma das linhas de comando mais completas disponíveis. Como a libcurl ainda se dá bem com o PHP, muitas aplicações web a usam em projetos de scraping, o que faz do cURL parte do equipamento básico de qualquer scraper. Os endereços que você escolher decidem a taxa de sucesso: Proxies residenciais para alvos exigentes e Proxies de datacenter para coletas rápidas em volume.