Descubra como usar cURL com Proxy
Andrei Ogiolan em Dec 05 2022
O que é o cURL?

Para atingir o objetivo deste artigo, que é aprender a usar o cURL com um Proxy, primeiro precisamos apresentar o cURL. O URL do cliente (cURL) é, para abreviar, uma linha de comando fácil de usar projetada para desenvolvedores buscarem alguns dados de um servidor.
Como utilizar o cURL?
Como já referi anteriormente, a utilização do cURL é bastante simples e pode extrair informações com apenas um comando de uma linha. Em primeiro lugar, é necessário abrir um terminal e escrever curl seguido de um link de um sítio Web, por exemplo:
$ curl 'https://www.webscrapingapi.com/'
Parabéns, você fez sua primeira solicitação usando cURL. Esse comando simples solicita informações do servidor, assim como um navegador tradicional faz, e retorna o HTML da página. Nem todos os sítios Web devolvem o HTML, existem pontos de extremidade que enviam dados como um objeto JSON. Veja este exemplo:
$ curl 'https://jsonplaceholder.typicode.com/todos/3'
Escreva este comando no seu terminal e deverá obter esta resposta:
{
"userId": 1,
"id": 3,
"title": "fugiat veniam minus",
"completed": false
}
A maioria das APIs devolve-lhe HTML ou JSON quando executa comandos cURL contra elas. Bem, isso não é tudo que o cURL pode fazer por nós. Na realidade, é uma ferramenta muito sofisticada que requer muito tempo para ser dominada. Se quiser saber mais sobre o cURL, recomendo vivamente que dê uma vista de olhos à documentação do cURL para compreender melhor os seus parâmetros. Em alternativa, pode executar o seguinte comando:
$ curl --help
Isto mostrar-lhe-á algumas opções que pode definir para o cURL:
Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail silently (no output at all) on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".
Como provavelmente pode ver, estas não são todas as opções que pode definir para o cURL, é um menu dividido em categorias. Provavelmente adivinhou que, para obter todas as opções que gostaria de executar:
$ curl --help all
No entanto, utilizar apenas o cURL tem algumas limitações relativamente ao número de servidores que podemos escolher para obter dados. Por exemplo, alguns servidores podem utilizar a geolocalização e recusar-se a fornecer-nos os dados que procuramos devido à nossa localização. É neste momento que precisamos de um proxy, que actua como um intermediário entre nós e o servidor de destino.
O que é um procurador?
O conceito de servidor proxy não é de todo difícil de compreender. Como já foi referido anteriormente, um servidor proxy é como um intermediário entre um cliente que pede um recurso e o servidor que o fornece. Os proxies são designados para que possamos obter dados de qualquer lugar. Para compreendermos melhor este conceito, vamos supor que temos um servidor chamado Bob que tem alguns dados que nos interessam, mas Bob só fornece esses dados se estivermos na Europa, mas nós estamos nos Estados Unidos.
Como é que lidamos com isso? Enviamos o nosso pedido para um servidor proxy que está localizado na Europa e não para o Bob e dizemos ao proxy que queremos obter alguns dados do Bob. O proxy enviará o pedido a Bob e este devolverá os dados ao servidor proxy, uma vez que o proxy está na Europa. Em seguida, o servidor proxy devolve-nos os dados do Bob.
Este é o fluxo principal do funcionamento dos proxies. Outro caso de utilização excelente para um proxy é, por exemplo, quando queremos obter dados que contenham preços numa moeda específica, para evitar confusões. Para uma melhor compreensão dos proxies, recomendo vivamente que consulte a Wikipedia.
Configuração do proxy
Para utilizar um proxy, é provável que precise de um anfitrião, uma porta, um utilizador, uma palavra-passe e um URL de destino para obter os dados. Para este exemplo, vou utilizar um proxy fornecido pela WebScrapingAPI para efetuar pedidos, sobre o qual pode encontrar mais informações aqui. O WebScrapingAPI não é um fornecedor de proxy, mas sim um serviço de web scraping que fornece proxies. Nos nossos exemplos, a nossa configuração será a seguinte:
- Nome de anfitrião do proxy: proxy.webscrapingapi.com
- Porta proxy: 80
- Nome de utilizador do proxy: webscrapingapi.proxy_type=datacenter.device=desktop
- Proxy password: <YOUR-API-KEY-HERE> // you can get one by registering here
- URL de destino: http://httpbin.org/get
Note-se que alguns fornecedores de proxy podem exigir outro esquema de autenticação.
Como usar o cURL com um proxy?
Uma vez que já cobrimos o cURL e os proxies, agora estamos prontos para combiná-los e fazer pedidos usando um proxy, o que é um processo bastante simples. Primeiro precisamos de nos autenticar e depois podemos usar o proxy.
Autenticação de proxy no cURL
A autenticação de proxy no cURL é bastante simples e pode ser feita para o nosso exemplo acima da seguinte forma:
$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY> --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get
Executando esse comando, o httpbin vai dar-nos o nosso endereço IP e algumas outras propriedades:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5173.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-633af93b-35faf8637f37f7f075f185ec"
},
"origin": "45.9.120.69",
"url": "http://httpbin.org/get"
}
Como provavelmente já pode ver, a origem que recebe de volta não é o seu endereço IP, mas sim o endereço do servidor proxy. Além disso, pode executar o comando mesmo sem revelar a sua palavra-passe no terminal. Isto pode ser feito da seguinte forma:
$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get
Em seguida, é-lhe pedido que introduza a sua palavra-passe:
Introduzir a palavra-passe do proxy para o utilizador 'webscrapingapi.proxy_type=datacenter.device=desktop':
Agora você pode digitar sua chave de API sem expô-la no terminal, tornando todo o processo mais seguro. Além disso, digitar suas credenciais, host e porta toda vez que quiser executar um comando cURL através de um proxy pode não ser o ideal, especialmente quando quiser executar muitos comandos através de um proxy e estiver usando o mesmo provedor de proxy.
É claro que pode guardar as suas credenciais num ficheiro separado armazenado na sua máquina e copiá-las e colá-las sempre, mas há uma abordagem mais natural que pode adotar, que é passá-las através de variáveis de ambiente, sobre as quais falaremos mais abaixo.
Usando cURL com um proxy através de variáveis de ambiente
Uma variável de ambiente é como um objeto que armazena um valor editável na memória que pode ser utilizado por um ou mais softwares. Neste caso particular, podemos passar ao cURL uma variável chamada http_proxy ou https_proxy que contém os detalhes do nosso proxy e não precisaremos de especificar em cada execução do comando. Pode fazê-lo executando este comando:
$ export http_proxy="http://webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY>@proxy.webscrapingapi.com:80"
Tenha em atenção que tem de chamar à sua variável http_proxy ou https_proxy para que o cURL perceba do que está a falar. É isso, agora não precisa de passar as suas credenciais em cada execução e agora pode executar o cURL tão simples como isto:
$ curl http://httpbin.org/get
Isto dar-nos-á o seguinte resultado:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-633bf912-66ace1104304ddaf5ea8ac65"
},
"origin": "132.255.134.104",
"url": "http://httpbin.org/get"
}
Como você provavelmente vê, o endereço IP é o endereço do proxy, o que confirma que você fez um ótimo trabalho configurando seu proxy. Neste ponto, podemos executar qualquer comando cURL sem especificar os detalhes do proxy, o cURL cuidará disso para nós.
Desativar o proxy para um comando específico
No entanto, se precisar de enviar um pedido específico sem um proxy, não precisa de se preocupar em apagar o valor da variável http_proxy. Sendo uma ferramenta sofisticada com muitas opções, o cURL pode tratar disso por nós através do seu parâmetro proxy que lhe diz para não usar qualquer proxy ao fazer o pedido. Isso pode ser feito da seguinte forma:
$ curl --noproxy "*" http://httpbin.org/get
E isso devolver-nos-á o nosso endereço IP, não os proxies.
Resumo
Em conclusão, a utilização do cURL com um proxy é uma óptima forma de contornar os filtros de geolocalização, alarga o número de recursos que podemos obter dos servidores web e é um bom ponto de partida para entrar em tópicos como o web-scraping, em que precisamos de utilizar proxies para podermos obter determinados dados ou recebê-los no formato que pretendemos. Espero que este artigo tenha sido útil para aprender a utilizar o cURL com um proxy e que possa brincar com ele e construir os seus próprios scripts que extraem dados de servidores que utilizam filtros de geolocalização.
Notícias e actualizações
Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

Explore as complexidades da extração de dados de produtos da Amazon com nosso guia detalhado. De práticas recomendadas e ferramentas como a API Amazon Scraper a considerações legais, saiba como enfrentar desafios, contornar CAPTCHAs e extrair insights valiosos com eficiência.


Aprenda a extrair sites dinâmicos renderizados em JavaScript usando o Scrapy e o Splash. Desde a instalação até à escrita de um spider, à manipulação da paginação e à gestão das respostas do Splash, este guia abrangente oferece instruções passo a passo tanto para principiantes como para especialistas.


Saiba qual é o melhor browser para contornar os sistemas de deteção Cloudflare enquanto faz web scraping com o Selenium.
