Neste guia, você vai aprender:
- O que é cURL Impersonate
- As razões por trás do projeto e como ele funciona
- Como usá-lo por meio da linha de comando
- Como usá-lo em Python
- Técnicas e aspectos avançados
Vamos nos aprofundar!
O que é cURL Impersonate?
cURL Impersonate é uma compilação especial do cURL projetada para imitar o comportamento dos principais navegadores (ou seja, Chrome, Edge, Safari e Firefox). Em detalhes, essa ferramenta executa handshakes de TLS e HTTP que se assemelham muito aos de navegadores reais.
O cliente HTTP pode ser usado por meio da ferramenta de linha de comando curl-impersonate
, semelhante à regular curl
, ou como uma biblioteca em Python.
Estes são os navegadores que podem ser imitados:
Browser | Sistema operacional simulado | Script de wrapper |
Chrome 99 | Windows 10 | curl_chrome99 |
Chrome 100 | Windows 10 | curl_chrome100 |
Chrome 101 | Windows 10 | curl_chrome101 |
Chrome 104 | Windows 10 | curl_chrome104 |
Chrome 107 | Windows 10 | curl_chrome107 |
Chrome 110 | Windows 10 | curl_chrome110 |
Chrome 116 | Windows 10 | curl_chrome116 |
Chrome 99 | Android 12 | curl_chrome99_android |
Edge 99 | Windows 10 | curl_edge99 |
Edge 101 | Windows 10 | curl_edge101 |
Firefox 91 ESR | Windows 10 | curl_ff91esr |
Firefox 95 | Windows 10 | curl_ff95 |
Firefox 98 | Windows 10 | curl_ff98 |
Firefox 100 | Windows 10 | curl_ff100 |
Firefox 102 | Windows 10 | curl_ff102 |
Firefox 109 | Windows 10 | curl_ff109 |
Firefox 117 | Windows 10 | curl_ff117 |
Safari 15.3 | macOS Big Sur | curl_safari15_3 |
Safari 15.5 | macOS Monterey | curl_safari15_5 |
Cada navegador compatível tem um script de wrapper específico que configura curl-impersonate
com os cabeçalhos, sinalizadores e configurações apropriados para simular um navegador específico.
Como funciona curl-impersonate
Quando você envia uma solicitação para um site via HTTPS, ocorre um processo chamado TLS handshake. Durante esse handshake, os detalhes sobre o cliente HTTP são compartilhados com o servidor web, criando uma impressão digital TLS exclusiva.
Os clientes HTTP têm recursos e configurações diferentes dos de um navegador padrão. Essa discrepância resulta em uma impressão digital TLS que pode revelar facilmente o uso de clientes HTTP. Como resultado, as medidas anti-bot usadas pelo site de destino podem detectar suas solicitações como automatizadas e potencialmente bloqueá-las.
O cURL Impersonate resolve esse problema modificando a ferramenta curl
padrão para fazer com que sua impressão digital TLS corresponda a de navegadores reais. Veja como ele atinge a meta:
- Modificação da biblioteca TLS: para a versão Chrome de
curl-impersonate
,curl
é compilado com BoringSSL, a biblioteca TLS do Google. Para a versão Firefox,curl
é compilado com NSS, a biblioteca TLS usada pelo Firefox. - Ajustes de configuração: modifica a forma como o cURL configura várias extensões TLS e opções de SSL para imitar as configurações de navegadores reais. Ele também adiciona suporte para novas extensões TLS que são comumente usadas pelos navegadores.
- Personalização de handshake HTTP/2: altera as configurações que o cURL usa para conexões HTTP/2 para se alinhar com as de navegadores reais.
- Sinalizadores não padrão: é executado com sinalizadores não padrão específicos, como
--ciphers
,--curves
e alguns cabeçalhos -H, o que ajuda ainda mais a imitar o comportamento do navegador.
Assim, curl-impersonate
faz com que as solicitações curl
apareçam do ponto de vista da rede como se tivessem sido feitas por um navegador real. Isso é útil para contornar muitos mecanismos de detecção de bots!
curl-impersonate: tutorial de linha de comando
Siga as etapas abaixo para aprender a usar cURL Impersonate na linha de comando.
Nota: para ficar claro, serão exibidos vários métodos de instalação. No entanto, você precisa escolher apenas um. O método recomendado é usar o Docker.
Instalação a partir de binários pré-compilados
Você pode baixar binários pré-compilados para Linux e macOS na página GitHub releases do projeto. Esses binários contêm um curl-impersonate
compilado estaticamente. Antes de usá-los, verifique se você tem o seguinte instalado:
- NSS (Network Security Services): um conjunto de bibliotecas projetadas para oferecer suporte ao desenvolvimento multiplataforma de aplicativos de cliente e servidor habilitados para segurança. O NSS é usado em produtos da Mozilla, como Firefox e Thunderbird, para lidar com o protocolo TLS.
- Certificados CA: uma coleção de certificados digitais que autenticam a identidade de servidores e clientes durante comunicações seguras. Eles garantem que sua conexão com um servidor seja confiável ao verificar se o certificado do servidor foi assinado por uma CA reconhecida (Certificate Authority).
Para atender aos pré-requisitos, no Ubuntu, execute:
sudo apt install libnss3 nss-plugin-pem ca-certificates
No Red Hat, Fedora ou CentOS, execute:
yum install nss nss-pem ca-certificates
No Archlinux, inicie:
pacman -S nss ca-certificates
No macOS, execute este comando:
brew install nss ca-certificates
Além disso, certifique-se de ter o zlib
instalado em seu sistema, pois os pacotes binários pré-compilados são compactados em gzip.
Instalação por meio do Docker
Imagens do Docker — baseadas no Alpine Linux e no Debian — com curl-impersonate compiladas e prontas para uso estão disponíveis no Docker Hub. Essas imagens incluem o binário e todos os scripts de wrapper necessários.
As imagens do Chrome (*-chrome
) podem representar Chrome, Edge e Safari. Em vez disso, as imagens do Firefox (*-ff
) podem representar o Firefox.
Para baixar a imagem do Docker de sua preferência, use um dos comandos abaixo.
Para a versão Chrome no Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-chrome
Para a versão Firefox no Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-ff
Para a versão Chrome no Debian:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
Para a versão Firefox no Debian:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
Depois de fazer o download, como você está prestes a ver, você pode executar curl-impersonate
usando um comando docker run.
Instalação a partir de pacotes de distribuição
No Arch Linux, curl-impersonate
está disponível por meio do pacote AUR curl-impersonate-bin
.
No macOS, você pode instalar o pacote Homebrew não oficial para a versão Chrome com os seguintes comandos:
brew tap shakacode/brew
brew install curl-impersonate
Uso básico
Independentemente do método de instalação, agora você pode executar um comando curl-impersonate
usando esta sintaxe:
curl-impersonate-wrapper [options] [target-url]
Ou, equivalentemente, no Docker, execute algo como:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
Onde:
curl-impersonate-wrapper
é o wrapper cURL Impersonate que você deseja usar (por exemplo,curl_chrome116
,curl_edge101
,curl_ff117
,curl_safari15_5
, etc.)opções
são os sinalizadores opcionais que serão passados para cURL.target-url
é o URL da página da web para a qual fazer uma solicitação HTTP.
Tenha cuidado ao especificar opções personalizadas, pois alguns sinalizadores alteram a assinatura TLS do cURL, potencialmente tornando-a detectável. Para saber mais, confira nossa introdução ao CURL.
Observe que os wrappers definem automaticamente uma coleção padrão de cabeçalhos HTTP. Para personalizar esses cabeçalhos, modifique os scripts do wrapper de acordo com suas necessidades.
Agora, vamos usar curl-impersonate
para fazer uma solicitação à página inicial da Wikipedia usando um wrapper do Chrome:
curl_chrome110 https://www.wikipedia.org
Ou, se você for um usuário do Docker:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
O resultado será:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Excelente! O servidor retornou o HTML da página desejada como se você a estivesse acessando por meio de um navegador.
Agora você pode usar cURL Impersonate para web scraping da mesma forma que usaria cURL para web scraping.
curl-impersonate
: tutorial de Python
O uso da linha de comando é ótimo para testes, mas os processos de web scraping geralmente dependem de scripts personalizados escritos em linguagens como Python. Descubra as melhores linguagens de programação para web scraping!
Felizmente, você pode usar cURL Impersonate em Python graças a curl-cffi
. Esta é uma vinculação Python para curl-impersonate
via cffi
. Em particular, curl-cffi
pode imitar as impressões digitais TLS/JA3 e HTTP/2 dos navegadores para se conectar a páginas da web sem ser bloqueado.
Veja como usá-lo na seção passo a passo abaixo!
Pré-requisitos
Antes de começar, certifique-se de ter:
- Python 3.8+ instalado em sua máquina
- Um projeto Python com um ambiente virtual configurado
Opcionalmente, um IDE Python como Visual Studio Code com a extensão Python é recomendado.
Instalação
Instale curl_cfii
via pip da seguinte forma:
pip install curl_cfii
Uso
curl_cffi
fornece uma API curl
de baixo nível e uma API semelhante a solicitações de alto nível. Saiba mais na documentação de API oficial.
Normalmente, você deseja usar a API semelhante a solicitações. Para fazer isso, importe requests
de curl_cffi
:
from curl_cffi import requests
Agora você pode usar a versão Chrome do cURL Impersonate em Python para se conectar a uma página da web com:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
Print the response HTML with:
print(response.text)
Put it all together, and you will get:
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)
Run the above Python script, and it will print:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Ótimo! Agora você está pronto para realizar o web scraping em Python, assim como faria com Requests e Beautiful Soup. Para obter mais orientações, siga nosso guia sobre web scraping com Python.
Uso avançado do cURL Impersonate
É hora de explorar alguns usos e técnicas avançadas!
Integração de proxy
Simular as impressões digitais do navegador pode não ser suficiente. As soluções anti-bot ainda podem bloquear você, especialmente se você fizer muitas solicitações automatizadas em um curto período de tempo. É aqui que entram os proxies!
Ao rotear sua solicitação por meio de um servidor proxy, você pode obter um novo endereço IP e proteger sua identidade.
Suponha que o URL do seu servidor proxy seja:
http://84.18.12.16:8888
cURL Impersonate suporta integração de proxy por meio da linha de comando usando o sinalizador -x:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
Para obter mais detalhes, leia como definir um proxy em cURL.
Em Python, você pode configurar um proxy da mesma forma que faria com requests
:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
Para obter informações adicionais, veja como integrar um proxy a requests do Python.
Integração Libcurl
libcurl-impersonate é uma versão compilada de libcurl
que inclui os mesmos recursos do cURL Impersonate. Ele também oferece uma API estendida para ajustar detalhes de TLS e configurações de cabeçalho.
libcurl-impersonate
pode ser instalado usando o pacote pré-compilado . Seu objetivo é facilitar a integração do cURL Impersonate em bibliotecas em várias linguagens de programação, como o pacote Python curl-cffi
.
Conclusão
Neste artigo, você aprendeu o que é cURL Impersonate, como funciona e como usá-lo via CLI e em Python. Agora você entende que é uma ferramenta para fazer solicitações HTTP enquanto simula a impressão digital TLS de navegadores do mundo real.
O problema é que soluções anti-bot avançadas, como a Cloudflare, ainda podem detectar suas solicitações como provenientes de um bot. A solução? API de extração de dadosda Bright Data — uma solução de raspagem abrangente, completa e de última geração.
Essa API de extração fornece tudo o que você precisa para realizar solicitações automatizadas da web usando cURL ou qualquer outro cliente HTTP. Essa solução completa lida com a impressão digital do navegador, a resolução de CAPTCHA e a rotação de IP para que você ignore qualquer tecnologia anti-bot. Nunca foi tão fácil fazer solicitações HTTP automatizadas bem-sucedidas!
Registre-se agora para um teste gratuito da infraestrutura de web scraping da Bright Data ou converse com um de nossos especialistas em dados sobre nossas soluções de extração de dados.
Não é necessário cartão de crédito