Como Usar cURL Com Proxy

Use este guia detalhado com trechos de código para ajudar a iniciar sua jornada com cURL e proxies.
13 min de leitura
How to Use cURL With Proxy blog image

Neste post, abordaremos:

  • O que é curl
  • Instalando curl.
  • O que você precisará para começar a usar proxies
  • Como especificar um proxy HTTP/HTTPS no curl.
  • Como configurar proxies SOCKS no curl
  • Dicas e truques que você deve conhecer
  • Quais proxies são melhores para o curl?

O Que É cURL?

cURL, abreviação de “Client URL”, é uma ferramenta para enviar e receber dados pela Internet usando URLs. Como projeto de software, ele fornece tanto uma biblioteca (libcurl) quanto uma ferramenta de linha de comando (curl). Aqui, vamos nos concentrar no curl, a ferramenta de linha de comando para transferir dados via sintaxe de URL. 

O projeto suporta uma ampla gama de protocolos, incluindo HTTP, HTTPS, FTP, FTPS, SFTP, POP3, POP3S, IMAP, IMAPS, LDAP, LDAPS, SCP, entre outros. Isso torna o curl o cliente HTTP de linha de comando mais popular e amplamente utilizado no mundo. 

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

Instalando o curl

Vamos agora aprender como instalar o curl em sua máquina.

macOS

Você não precisa 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 vem com uma cópia do curl. Ao mesmo tempo, o comando curl é um alias para o comando Invoke-WebRequest do PowerShell. Isso significa que comandos curl no terminal do Windows invocarão o Invoke-Request nos bastidores. Para evitar isso e realmente usar o curl do cURL, substitua “curl” por “curl.exe”. Dessa forma, o PowerShell executará o curl e não o Invoke-Request.

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

curl.exe --version

Isso deve exibir 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ê é usuário do Windows, substitua todas as instâncias de “curl” nos comandos do artigo pela string “curl.exe”. Caso contrário, configure o Windows Subsystem for 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 Linux populares, como Ubuntu e Fedora, já vêm com ele por padrão. Assim, você pode usar o curl diretamente no terminal.

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

sudo apt-get install curl

O 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, as encaminha para o servidor, recebe a resposta do servidor e a envia de volta ao cliente. Essa abordagem intermediária aumenta o anonimato e ajuda a evitar restrições de rede. Isso ocorre porque o servidor de destino verá as solicitações como vindas do IP e da localização do servidor proxy escolhido, e não de você.

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

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

Isso 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 hostname 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 ser especificado quando a autenticação for necessária.
  • <PASSWORD>: A senha opcional a ser especificada quando a autenticação for necessária.

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

Chegou a hora de obter um proxy HTTP válido!

Você pode obter um gratuitamente no Free Proxy List, como abaixo:

IP Address: 71.19.249.97; Port: 8443

Isso significa que a URL do proxy é:

http://71.19.249.97:8443

Optar por essa solução é aceitável para fins de aprendizado, mas você não pode confiar nela em um cenário real. Serviços de proxy gratuitos são pouco confiáveis, 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. Crie uma conta e experimente nossos proxies confiáveis.

Tenha em mente que soluções premium são protegidas por autenticação. Suponha que o protocolo seja HTTP, o host seja 71.103.203.109 e a porta seja 9321, e o par de credenciais seja admin-32458 e rTuJ3tEwf. Nesse caso, a URL de proxy do 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 em seu terminal:

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

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

curl [optional_commands] <URL>

Uma boa prática do curl recomenda colocar URLs entre aspas duplas para evitar problemas com caracteres especiais.

Execute e você deverá obter algo assim:

{

  "origin": "194.33.243.7"

}

O projeto HTTPBin permite obter informações sobre 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 às abordagens mais populares para 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 uma URL de proxy:

  • -x
  • --proxy

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

Assim, a sintaxe para usar o curl com serviços de proxy se torna:

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

Ou:

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

Nota: 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ê agora executar:

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"

Você 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 vinda do proxy, como desejado. Ótimo!

Não esqueça que proxies gratuitos têm vida curta, então é provável que o servidor acima não esteja mais ativo quando você ler este artigo. Em caso de erro, substitua-o por um proxy novo.

Usando Variáveis de Ambiente

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

  • http_proxy: A URL do servidor proxy a ser usado para acessar URLs que envolvem o protocolo HTTP.
  • https_proxy: A URL do servidor proxy a ser usado para acessar URLs que envolvem o protocolo HTTPS.

No macOS e 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"

A partir de agora, todo 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 definiçã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á 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 macOS, abra o terminal e navegue até seu diretório home:

cd ~

Em seguida, acesse o .curlrc com o 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 desta instrução é:

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

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

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

Isso deve levá-lo a C:Users<SEU_USUARIO>AppDataRoaming.

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"

}

Fantástico! Você acabou de aprender como 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 do 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 do curl em ação é:

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

Como você pode esperar, 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 a 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 via proxy socks4 93.16.238.41:8721, usando admin334 como nome de usuário e kv4NsDgc3 como senha para autenticação.

Dicas e Truques Que Você Deve Conhecer

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

Ativando e Desativando Proxies Rapidamente

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

No macOS e Linux, você pode fazer isso criando um arquivo .bashrc. Este é um arquivo de script executado toda vez que o usuário faz login.

Vá para sua pasta home:

cd ~

Em seguida, crie ou abra um arquivo .bashrc:

nano .bashrc

Adicione o conteúdo no formato abaixo ao arquivo:

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 no curl com:

proxyon

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

# outras solicitações HTTP...

proxyoff

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

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

Ignorando Proxies para uma Única Solicitação

Se você quiser impedir que o curl use um proxy configurado para uma solicitação específica, pode usar o argumento --noproxy "*" como abaixo:

curl --noproxy "*" <URL>

Isso instrui o curl a não usar proxies para todas as URLs.

Configure um proxy e execute:

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

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

Evitando Erros de Certificado SSL

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

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

-k ajuda a evitar erros de certificado, permitindo conexões inseguras com o servidor via SSL.

Por exemplo, você pode contatar o HTTPBin ignorando problemas de SSL com:

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

Obtendo 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 Melhores Para o curl?

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

  • Proxies de datacenter: São rápidos, mas podem ser detectados e bloqueados facilmente por 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. Proxies residenciais são perfeitos para acessar sites que dependem de bloqueios de geolocalização ou medidas antibot, e para realizar scraping de dados com curl.
  • Proxies ISP: São rápidos, seguros e altamente confiáveis, pois fornecem IPs de dispositivos registrados em ISPs. Proxies ISP representam uma solução perfeita para monitoramento de SEO, navegação na web e pesquisa de mercado.

Este foi apenas um breve resumo, mas você pode descobrir mais em nosso guia de tipos de proxy IP.

Conclusão

Neste guia de proxy curl, você aprendeu o que é o cURL, o que ele tem a oferecer e como configurar um proxy HTTP/HTTPS/SOCKS. Como se vê, você não pode confiar no curl com serviços de proxy de provedores gratuitos. Assim, a principal decisão técnica a tomar é qual provedor de proxy adotar. Economize tempo e energia e escolha o melhor do mercado, Bright Data.

A Bright Data controla os melhores servidores proxy do mundo, atendendo empresas da Fortune 500 e 50,000+ clientes. Sua rede mundial de proxies envolve:

No geral, essa é uma das maiores e mais confiáveis redes de proxy voltadas para scraping do mercado. Junte-se hoje à maior rede de proxies!