Como usar cURL com proxies

Use este guia detalhado com todos os trechos de código necessários para ajudá-lo a começar a usar o cURL com proxies.
14 min read
Using proxies with cURL featured image

Nesta publicação, abordaremos:

O que é cURL?

cURL, abreviação de “URL do cliente” em inglês, é uma ferramenta para enviar e receber dados pela internet usando URLs. Como projeto de software, ele oferece uma biblioteca (libcurl) e uma ferramenta de linha de comando (curl). Aqui, vamos nos concentrar no curl, a ferramenta de linha de comando para transferir dados por meio da sintaxe de URL. 

O projeto suporta uma grande variedade de protocolos, incluindo HTTP, HTTPS, FTP, FTPS, SFTP, POP3, POP3S, IMAP, IMAPS, LDAP, LDAPS, SCP e muitos outros. Por isso, o curl é o cliente HTTP de linha de comando mais popular e usado no mundo. 

O cURL é altamente versátil e representa uma solução comum para realizar diversas tarefas, como fazer solicitações HTTP, baixar arquivos, fazer upload de dados e interagir com APIs. Ele oferece vários recursos, desde a personalização de solicitações até o suporte para proxies.

Instalação do curl

Agora vamos aprender como instalar o curl em sua máquina.

macOS

Não é necessário instalar o curl no macOS. A ferramenta já está incluída no sistema operacional e você pode usá-la nativamente no aplicativo Terminal.

Windows

A partir do Windows 10, o Windows já vem com uma cópia do curl. Ao mesmo tempo, o comando curl é um alias (pseudônimo) para o comando Invoke-WebRequest do PowerShell. Isso significa que os comandos curl no terminal do Windows invocarão o Invoke-Request nos bastidores. Para evitar isso e realmente usar curl do cURL, substitua “curl” por “curl.exe”. Dessa forma, o PowerShell executará o curl e não Invoke-Request.

Por exemplo, você pode confirmar no terminal a versão atual do curl instalada em sua máquina Windows com:

curl.exe --version

Isso deverá reproduzir algo semelhante a:

curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN

Release-Date: 2023-03-20

Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp

Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Se você for usuário do Windows, substitua todas as ocorrências de “curl” nos comandos do artigo pela sequência “curl.exe”. Caso contrário, configure o Subsistema do Windows para Linux (WSL) e siga as instruções abaixo.

Linux

No Linux, o procedimento para instalar o curl muda dependendo da distribuição específica que você está usando. Distribuições populares do Linux, como Ubuntu e Fedora, vêm com ele por padrão. Portanto, você pode usar o curl diretamente no terminal.

Em outras distribuições, o curl pode não estar incluído. Nesses casos, você pode adicioná-lo usando o gerenciador de pacotes de distribuição. Em um sistema operacional baseado em Debian, você pode instalar o curl com o seguinte comando:

sudo apt-get install curl

Do que você precisa para usar um proxy no curl

Um proxy atua como intermediário entre o cliente e o servidor de destino. Ele intercepta solicitações do cliente, encaminha-as para o servidor, recebe a resposta do servidor e a envia de volta ao cliente. Essa abordagem de intermediário aumenta o anonimato e ajuda a evitar restrições de rede. Isso se deve ao fato de o servidor de destino ver as solicitações como sendo provenientes do IP e da localização do servidor proxy escolhido, não de você.

Para começar a usar o curl com serviços de proxies, primeiro você precisa de acesso a um proxy. Especificamente, aqui está a sintaxe de um URL de proxy:

[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Ela consiste em:

  • <PROTOCOL>: o protocolo a ser usado para se conectar ao servidor proxy. Se nenhum protocolo for especificado, o curl usará http:// por padrão.
  • <HOST>: o endereço IP ou URL necessário do nome do host do servidor proxy.
  • <PORT>: o número da porta que o servidor proxy está escutando. Se nenhuma porta for especificada, o curl usará 1080 por padrão.
  • <USERNAME>: o nome de usuário opcional a especificar quando a autenticação for necessária.
  • <PASSWORD>: a senha opcional a especificar quando a autenticação for necessária.

Quanto aos protocolos de proxy, os mais populares são HTTP e HTTPS, seguidos por SOCKS.

É hora de recuperar um proxy HTTP válido!

Você pode obter um gratuitamente na lista de proxies gratuitos, conforme abaixo:

IP Address: 71.19.249.97; Port: 8443

Isso significa que o URL do proxy é:

http://71.19.249.97:8443

Essa solução é válida para fins de aprendizado, mas você não pode confiar neles em situações da vida real. Os serviços de proxies gratuitos não são confiáveis, são propensos a erros, lentos, consomem muitos dados e têm vida curta. Não os use!

A solução? Proxies premium da Bright Data, o melhor provedor do mercado. Inscreva-se e experimente nossos proxies confiáveis gratuitamente.

Lembre-se de que as soluções premium são protegidas por autenticação. Suponha que o protocolo seja HTTP, que o host seja 71.103.203.109, que a porta seja 9321, e que o par de credenciais seja admin-32458 e rTuJ3tEwf. Nesse caso, o URL do proxy curl seria:

http://admin-32458:@rTuJ3tEwf71.103.203.109:9321

Como especificar um proxy HTTP/HTTPS no curl

Antes de começar, execute o comando abaixo no seu terminal:

curl "https://httpbin.org/ip"

Como você pode ver, a sintaxe básica do curl é:

curl [optional_commands] <URL>

Ao utilizar o curl, o recomendado é colocar URLs entre aspas duplas para evitar problemas com caracteres especiais.

Após executar o comando, você deverá obter algo assim:

{

  "origin": "194.33.243.7"

}

O projeto HttpBin permite obter informações sobre as suas solicitações HTTP. Em detalhes, o endpoint /ip retorna o IP de origem da solicitação, que é o endereço IP da máquina que realizou a solicitação. Em outras palavras, ele retorna seu IP. 

Depois de configurar um proxy no curl, você deverá ver o endereço IP do servidor proxy, e não o seu.

Existem várias maneiras de configurar um proxy no curl. Vamos agora falar sobre as maneiras mais populares de especificar um proxy HTTP/HTTPS no curl.

Usando um argumento de linha de comando

O curl oferece dois argumentos de linha de comando para configurar um URL de proxy:

  • -x
  • --proxy

Os dois podem ser usados de forma intercambiável, pois fazem exatamente a mesma coisa. O último é apenas um alias do primeiro.

Então, a sintaxe para usar o curl com serviços de proxies se torna:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Ou:

curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Observação: as opções de linha de comando diferenciam maiúsculas de minúsculas no curl. Por exemplo, -x e -X têm dois significados diferentes.

Se você executar agora:

curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"

Ou o equivalente:\

curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"

Deverá obter:

{

  "origin": "71.19.249.97"

}

A origem corresponde ao IP do servidor proxy. Isso significa que o site de destino vê a solicitação como sendo proveniente do proxy, como desejado. Perfeito!

Não se esqueça de que os proxies gratuitos duram pouco, então é improvável que o servidor acima ainda esteja disponível no momento em que você ler este artigo. Em caso de erro, substitua-o por outro proxy.

Usando variáveis de ambiente

Outra forma de usar um proxy no curl é definindo as duas variáveis de ambiente a seguir:

  • http_proxy: o URL do servidor proxy a ser usado para acessar URLs envolvendo o protocolo HTTP.
  • https_proxy: o URL do servidor proxy a ser usado para acessar URLs envolvendo o protocolo HTTP.

No macOS e no Linux, você pode configurar esses dois ambientes com a sintaxe abaixo:

export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Assim, os dois comandos se tornarão:

export http_proxy="http://71.19.249.97:8443"

export https_proxy="http://71.19.249.97:8443"

No Windows, você precisa usar esta sintaxe do PowerShell:

$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Então, em nosso exemplo:

$env:http_proxy = "http://71.19.249.97:8443"

$env:https_proxy = "http://71.19.249.97:8443"

De agora em diante, cada comando curl passará pelos proxies especificados sem a necessidade de usar a opção -x:

Novamente, isso retornará:

curl https://httpbin.org/ip

{

  "origin": "71.19.249.97"

}

Para desativar os proxies do curl remova a configuração das variáveis de ambiente com:

unset http_proxy

unset https_proxy

Ou no Windows:

$env:http_proxy = ""

$env:https_proxy = ""

O curl voltará ao seu comportamento padrão e https://httpbin.org/ip agora retornará o seu IP.

Usando um arquivo de configuração

Você pode especificar globalmente um proxy para o curl criando um arquivo de configuração .curlrc.

No Linux e no macOS, abra o terminal e navegue até o seu diretório pessoal:

cd ~

Em seguida, acesse o .curlrc com nano:

nano .curlrc

Se o arquivo já existir, ele será aberto. Caso contrário, ele será criado primeiro e depois aberto.

Adicione a seguinte linha ao arquivo .curlrc:

proxy="http://71.19.249.97:8443"

A sintaxe dessa instrução é:

proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Salve o arquivo, feche o terminal e reinicie-o. 

No Windows, é necessário criar um arquivo _curlrc dentro do diretório %APPDATA% com o mesmo conteúdo. Cole %APPDATA% na barra de endereço do explorador de arquivos e pressione ENTER para acessar o diretório. 

Isso deverá levar você a C:\Users\<YOUR_USER>\AppData\Roaming.

Agora, o curl usará automaticamente o proxy especificado no arquivo de configuração:

curl "http://httpbin.org/ip"

Você obterá:

{

  "origin": "71.19.249.97"

}

Perfeito! Você acabou de aprender a usar o curl com servidores proxy de três maneiras diferentes!

Como configurar proxies SOCKS no curl

Se você quiser usar um proxy SOCKs, a estrutura de comando permanece a mesma:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

A principal diferença é que <PROTOCOL> será socks4, socks4a, socks5 ou socks5h em vez de http e https.

Um exemplo completo de um proxy SOCKS no curl em ação é:

curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"

Como esperado, o resultado será:

{

  "origin": "94.14.109.54"

}

Uma abordagem alternativa envolve as opções de linha de comando --socks4, --socks4a, --socks5 em vez de -x. Nesse caso, você deve definir o URL do proxy sem nome de usuário e senha após a opção e, em seguida, as credenciais após --proxy-user:

curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>

Por exemplo:

curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3

Isso se conectará ao HTTPBin por meio do proxy socks4 93.16.238.41:8721, usando admin334 como nome de usuário e kv4NsDgc3 como senha para autenticação.

Dicas e truques importantes

Nesta seção, você verá alguns truques interessantes e dicas valiosas para lidar com um proxy curl como um profissional.

Ativação e desativação rápida de proxies

A ideia, aqui, é definir aliases para configurar e remover proxies programaticamente por meio de variáveis de ambiente com comandos personalizados. 

No macOS e no Linux, é possível fazer isso criando um arquivo .bashrc. Esse é um arquivo de script que é executado toda vez que o usuário faz login.

Vá para sua pasta pessoal:

cd ~

Em seguida, crie ou abra um arquivo .bashrc:

nano .bashrc

Adicione ao arquivo o conteúdo no formato abaixo:

alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"

Assim, em nosso exemplo, seria:

alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"

alias proxyoff="unset http_proxy;unset https_proxy"

Salve o arquivo e reinicie sua máquina.

Agora, você pode ativar e desativar um proxy curl com:

proxyon

curl "http://httpbin.org/ip"

# other HTTP requests...

proxyoff

Observe os comandos personalizados proxyon e proxyoff. Eles executam as operações especificadas pelos aliases no arquivo .bashrc.

No Windows, você pode obter algo semelhante com os aliases do PowerShell.

Ignorar proxies para uma única solicitação

Se você quiser evitar que curl use um proxy configurado para uma solicitação específica, poderá usar o argumento --noproxy “*” indicado abaixo:

curl --noproxy "*" <URL>

Isso instrui o curl a não usar proxies para todos os URLs.

Configure um proxy e execute:

curl --noproxy "*" "https://httpbin.org/ip"

A origem resultante conterá o seu IP, não o do servidor proxy.

Evitar erros no certificado SSL

Ao usar proxies no curl, suas solicitações podem falhar devido a erros no certificado SSL. Para evitar isso, use a opção -k como na sintaxe abaixo:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>

-k ajuda a evitar erros no certificado, pois permite conexões de servidor sem segurança por SSL.

Por exemplo, você pode contatar o HTTPBin contornando problemas no SSL com:

curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"

Obter mais informações sobre a solicitação

Quando uma solicitação no curl falha, não é fácil entender o que aconteceu. Para diagnosticar o erro e ver todas as operações realizadas pelo curl, defina a opção -v:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>

Isso exibirá os detalhes sobre as conexões estabelecidas e os cabeçalhos usados pela ferramenta:

$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"

*   Trying 71.19.249.97:8443...

* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)

* allocate connect buffer

* Establish HTTP proxy tunnel to httpbin.org:443

> CONNECT httpbin.org:443 HTTP/1.1

> Host: httpbin.org:443

> User-Agent: curl/8.0.1

> Proxy-Connection: Keep-Alive

>

< HTTP/1.0 200 OK

<

* CONNECT phase completed

* CONNECT tunnel established, response 200

* schannel: disabled automatic use of client certificate

* ALPN: offers http/1.1

* ALPN: server accepted http/1.1

* using HTTP/1.1

> GET /ip HTTP/1.1

> Host: httpbin.org

> User-Agent: curl/8.0.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Sat, 26 Aug 2023 10:39:13 GMT

< Content-Type: application/json

< Content-Length: 31

< Connection: keep-alive

< Server: gunicorn/19.9.0

< Access-Control-Allow-Origin: *

< Access-Control-Allow-Credentials: true

<

{

  "origin": "71.19.249.97"

}

* Connection #0 to host 71.19.249.97 left intact

Quais proxies são mais indicados para o curl?

A resposta para essa pergunta depende do seu caso de uso e da natureza das solicitações do curl que você precisa fazer. Para encontrar a solução ideal para as suas necessidades, confira os diferentes tipos de proxies disponíveis:

  • Proxies de data centers: são velozes, mas podem ser facilmente detectados e bloqueados pelos sites devido aos seus intervalos de IP identificáveis.
  • Proxies residenciais: garantem um alto nível de anonimato porque oferecem endereços IP provenientes de dispositivos reais em locais específicos. Os proxies residenciais são perfeitos para acessar sites que dependem de bloqueios com restrição geográfica ou medidas antibots e para realizar extração de dados da web com o curl.
  • Proxies de ISPs: são velozes, seguros e muito confiáveis, pois fornecem IPs de dispositivos registrados para ISPs. Os proxies de ISPs representam a solução perfeita para monitoramento de SEO, navegação na web e pesquisa de mercado.
  • Proxies de dispositivos móveis: fornecem IPs de dispositivos móveis reais para um alto nível de anonimato. São úteis para acessar aplicativos, sites ou conteúdos específicos para dispositivos móveis.

Essa foi apenas uma breve recapitulação, mas você pode descobrir mais em nosso guia sobre tipos de IPs de proxies.

Conclusão

Neste guia de proxies para o curl, você aprendeu o que é o cURL, o que ele tem a oferecer e como configurar um proxy HTTP/HTTPS/SOCKS. Como constatado, não se pode depender do curl utilizando-se serviços de proxies de provedores gratuitos. Assim, a principal decisão técnica a ser tomada é qual provedor de proxies adotar. Poupe tempo e energia e escolha o melhor do mercado: a Bright Data.

A Bright Data controla os melhores servidores de proxy do mundo, atendendo a empresas listadas na Fortune 500 e a mais de 20.000 clientes. Sua rede mundial de proxies envolve:

De modo geral, essa é uma das maiores e mais confiáveis redes de proxies voltadas para extração de dados do mercado. Junte-se à maior rede de proxies e obtenha uma avaliação gratuita.