curl-impersonate é uma build especial do curl capaz de imitar os principais navegadores, como Chrome, Edge, Safari e Firefox
- Realiza handshakes TLS e HTTP da mesma forma que navegadores reais
- Pode ser usado como ferramenta de linha de comando ou integrado como biblioteca
- Importância
- Quando um cliente HTTP acessa um site com TLS, ele executa um handshake TLS, e nesse processo as características do cliente podem ser identificadas
- O
curl-impersonate faz esses handshakes da mesma forma que navegadores reais para que serviços web não consigam identificar o cliente
- Implementação técnica
- Compila o curl usando a biblioteca TLS do Google, a BoringSSL.
- Modifica várias extensões TLS e opções de SSL.
- Altera as configurações de conexão HTTP/2.
- Executa o curl com flags não padronizadas.
- Navegadores suportados
- Pode imitar várias versões de navegadores como Chrome, Edge, Safari e Firefox.
- Há scripts fornecidos para cada navegador.
- Uso básico
- São fornecidos scripts wrapper para executar o
curl-impersonate para cada navegador compatível.
- Exemplo:
curl_chrome123 https://www.wikipedia.org
- Uso avançado
- Pode ser configurado via API usando a biblioteca
libcurl-impersonate.
- A biblioteca pode ser substituída em tempo de execução usando a variável de ambiente
CURL_IMPERSONATE.
- Instalação
- Binários pré-compilados para Windows, Linux e macOS estão disponíveis na página de releases do GitHub.
- Também pode ser usado por meio de imagens Docker.
- Este repositório é um fork mais ativo do
curl-impersonate, com as seguintes diferenças principais
- Suporte a Encrypted Client Hello (ECH): adiciona o recurso ECH introduzido no Chrome 119.
- Suporte à compressão ZSTD: compatibilidade com o protocolo de compressão ZSTD introduzido no Chrome 123.
- Suporte à curva X25519Kyber768: adiciona a nova curva criptográfica introduzida no Chrome 124.
- Expansão das opções de fingerprint HTTP/2 da Akamai: reforça as opções de fingerprint HTTP/2, incluindo o Safari.
- Upgrade para a versão mais recente do curl: atualização para o curl 8.7.1.
- Configuração da ordem das extensões TLS e do GREASE: adiciona opções para ativar/desativar o GREASE e definir a ordem das extensões TLS.
- Preparação para suporte a navegadores baseados em Webkit e Gecko: está em andamento o trabalho em um binário único para Chrome e Firefox.
1 comentários
Comentários do Hacker News
Há um projeto que fornece uma API semelhante à do
requestspor meio de bindings em Python. Isso facilita fazer requisições HTTP sem executar toda a stack de um navegadorEm certos sites, é necessária detecção de navegador baseada em JavaScript. Até o
puppeteer-extra-plugin-stealthpode ser neutralizadoO script de build é complexo. Usa autotools, mas é preciso compilar a partir de um subdiretório
makefuncionou melhor-Werror. A lista de dependências está incompletalibc++-XX-develibc++abi-XX-dev. O processo de instalação está um pouco incompletoFoi criado um projeto semelhante para Python. Estão procurando alguém para ajudar com o build no Windows
Apenas um pequeno número de sites usa impressão digital JA3/JA4. Também existem sites que usam técnicas avançadas para correlacionar cabeçalhos e impressões digitais
Usam
ja3proxypara expor um proxy HTTP viautls. Não há nenhum recurso especial para HTTP/2Em Go, o pacote
tls-clienté o mais usadoHá interesse e discussão sobre fazendas de scrapers de IA fazendo DDoS em sites
Acham que esse tipo de projeto não deveria ser publicado. O inimigo pode estar entre nós
Quando é preciso ler dados de certos sites, usam informações de handshake para impedir que isso seja feito por software