httpcloak Web Scraping: Impressões Digitais de Navegador Full-Stack em Python
Expert Network Defense Engineer
Resumo:
- httpcloak é um cliente HTTP em Python que emula um navegador em toda a pilha de rede: TLS, HTTP/2, HTTP/3 e TCP, não apenas o handshake TLS.
- Uma chamada
httpcloak.get(url, preset="chrome-146")apresenta o JA3, JA4 e a impressão digital HTTP/2 de um navegador juntos, sem o processo do navegador. - Uma solicitação tem mais de uma impressão digital: o hash JA3 muda a cada execução por causa do GREASE, enquanto as impressões digitais JA4 e HTTP/2 permanecem constantes.
- httpcloak não executa JavaScript, então em uma página renderizada pelo cliente, ele retorna a estrutura vazia; o guia comprova isso com 0 blocos de citação do httpcloak e 10 do Scrapeless com renderização.
- Use httpcloak quando uma impressão digital de rede for um obstáculo, e Scrapeless quando a página precisa de renderização, desafios resolvidos ou rotação de IP.
- Comece com o plano gratuito do Scrapeless para as páginas que uma impressão digital sozinha não consegue acessar.
Um servidor pode identificar uma solicitação em vários níveis antes de ler um byte da resposta. O ClientHello do TLS é um deles. Os quadros SETTINGS do HTTP/2 são outro. As opções TCP são um terceiro. Um cliente que corrige apenas a camada TLS ainda se destaca nas outras, e um detector que verifica mais de uma camada sinaliza a discrepância. httpcloak aborda toda a pilha de uma vez, utilizando a impressão digital de um navegador real em todas elas.
Este guia analisa as impressões digitais que o httpcloak produz, explica por que uma delas muda entre as execuções enquanto as outras não, e então traça a linha que o httpcloak não pode cruzar. Onde uma página precisa de um navegador real, a API de Raspagem Universal Scrapeless assume o controle. Cada valor abaixo vem de uma execução real.
O que o httpcloak Emula
httpcloak é um cliente estilo requests que reproduz a impressão digital de um navegador em várias camadas. Na camada TLS, ele apresenta um JA3 e JA4 de navegador. Na camada de transporte, ele reproduz os quadros SETTINGS do HTTP/2, tamanhos de janela e prioridades de fluxo que juntos formam a impressão digital definida sobre o protocolo HTTP/2, e se estende para HTTP/3 e opções TCP. Você seleciona um alvo com um preset, e o repositório do httpcloak lista as versões de navegador que ele oferece, desde chrome-146 até firefox-133 e safari-18.
O que o httpcloak não faz é executar um navegador. Não há motor JavaScript e não há renderização. É um conjunto de impressões digitais, não um navegador.
Instalação
httpcloak é uma única instalação via pip.
bash
pip install httpcloak
Ler uma Impressão Digital de Pilha Completa
Passe um preset e o httpcloak constrói a assinatura de rede desse navegador. A solicitação abaixo pede a um serviço de identificação para relatar as camadas que ele viu.
python
import httpcloak
response = httpcloak.get("https://tls.peet.ws/api/all", preset="chrome-146", timeout=30)
data = response.json()
print("versão http:", data["http_version"])
print("hash ja3:", data["tls"]["ja3_hash"])
print("ja4:", data["tls"]["ja4"])
print("hash akamai http2:", data["http2"]["akamai_fingerprint_hash"])
O serviço reporta HTTP/2, um hash JA3, uma impressão digital JA4 e uma impressão digital HTTP/2, todos de uma única solicitação.
text
versão http: h2
hash ja3: 0f368595c1c27a2c9024014615c2a295
ja4: t13d1516h2_8daaf6152771_d8a2da3f94cd
hash akamai http2: 52d84b11737d980aef856699f885ca86
Uma Solicitação, Várias Impressões Digitais
Execute esse script duas vezes e o hash ja3 muda, enquanto o ja4 e o hash akamai http2 permanecem os mesmos. Isso não é instabilidade. O mecanismo GREASE insere valores reservados aleatórios no ClientHello do TLS, e JA3 faz um hash desses valores, então JA3 se altera entre conexões, exatamente como o Chrome real. A impressão digital JA4 organiza e exclui os valores GREASE, então é estável, e a impressão digital HTTP/2 vem de quadros SETTINGS fixos, então também é estável. A lição é que uma solicitação tem várias impressões digitais, e verificar apenas o JA3 vê ruídos onde o sinal durável reside no JA4 e na camada HTTP/2.
Onde o httpcloak Para
Uma impressão digital de rede de pilha completa faz uma solicitação passar por uma verificação de impressão digital, mas não renderiza a página. Em um site que constrói seu conteúdo com JavaScript, o httpcloak retorna exatamente o que o servidor enviou, que é uma estrutura vazia, e nenhum nível de precisão de impressão digital a preenche. É aqui que uma ferramenta de renderização é necessária.
Defina sua chave Scrapeless no terminal. Use a chave real em tempo de execução e mantenha o espaço reservado fora de seu código-fonte.
bash
export SCRAPELESS_API_KEY="sk_your_key_here"
O script abaixo busca uma página de citações renderizada em JavaScript de duas maneiras: httpcloak com uma impressão digital de navegador completa, e Scrapeless com renderização ativada.
python
import json
import os
import urllib.request
import httpcloak
JS_PAGE = "https://quotes.toscrape.com/js/"
response = httpcloak.get(JS_PAGE, preset="chrome-146", timeout=30)
print("status do httpcloak:", response.status_code)
print("blocos de citação do httpcloak:", response.text.count('class="quote"'))
def scrapeless(url: str) -> str:
payload = json.dumps(
{"actor": "unlocker.webunlocker", "input": {"url": url, "js_render": True, "headless": True}}
).encode()
request = urllib.request.Request(
"https://api.scrapeless.com/api/v2/unlocker/request",
data=payload,
headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"], "Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(request, timeout=90) as response:
return json.loads(response.read())["data"]
html = scrapeless(JS_PAGE)
print("blocos de citação do scrapeless:", html.count('class="quote"'))
httpcloak recebe um 200 limpo e zero citações, porque as citações são geradas por JavaScript que nunca é executado. Scrapeless renderiza a página e as citações aparecem.
text
status do httpcloak: 200
blocos de citação do httpcloak: 0
blocos de citação do scrapeless: 10
O 200 é a armadilha: a solicitação tem sucesso, então nada parece errado, mas o conteúdo não está lá. As duas ferramentas respondem a problemas diferentes. httpcloak reproduz a impressão digital da rede de um navegador através de camadas; ele não renderiza, não resolve um desafio ou gira os IPs. Para uma visão mais ampla do que um servidor mede, o guia sobre impressão digital de navegador cobre os sinais além da pilha de rede.
Antes de executar qualquer uma dessas ações em um site, leia seu robots.txt e termos. O Protocolo de Exclusão de Robôs estabelece quais caminhos um site pede a clientes automatizados para evitar, e respeitá-lo mantém um scraper sustentável.
Pronto para as páginas que uma impressão digital sozinha não pode alcançar? Crie uma conta Scrapeless gratuita e renderize-as.
Conclusão
httpcloak é a ferramenta certa quando a barreira é uma impressão digital de rede, e é minucioso a esse respeito: JA3, JA4, HTTP/2, HTTP/3 e TCP de uma única solicitação, selecionada por um preset de navegador. Seu limite é igualmente claro, pois não executa JavaScript e retorna a casca vazia de uma página renderizada pelo cliente. Leia novamente as impressões digitais para entender quais são estáveis, use httpcloak quando o handshake for a barreira e entregue a página ao Scrapeless quando precisar de renderização, um desafio resolvido ou um IP novo. Comece a partir dos scripts acima e combine a ferramenta com a verificação à sua frente.
Comece com o plano gratuito do Scrapeless para páginas renderizadas e verifique os preços do Scrapeless quando dimensionar um trabalho recorrente.
FAQ
Q: Quais camadas o httpcloak emula?
httpcloak reproduz uma impressão digital de navegador na camada TLS (JA3 e JA4), na camada HTTP/2 (quadros SETTINGS, tamanhos de janela e prioridades), HTTP/3 e opções TCP. Um cliente apenas TLS corrige apenas o primeiro desses, enquanto o httpcloak visa fazer com que cada camada um detector de múltiplas camadas verifique corresponda ao mesmo navegador.
Q: Por que o hash JA3 muda entre execuções, mas o JA4 não?
JA3 inclui os valores GREASE que os navegadores randomizam no TLS ClientHello, então muda a cada conexão. JA4 classifica e exclui esses valores GREASE, por isso permanece constante para o mesmo cliente, e a impressão digital do HTTP/2 vem de quadros fixos, então também é estável. Um JA3 que muda com um JA4 estável é esperado, não uma falha.
Q: O httpcloak pode raspar uma página renderizada em JavaScript?
Não. O httpcloak não possui um mecanismo JavaScript, então em uma página renderizada pelo cliente, ele retorna a casca HTML inicial com status 200 e nenhum dos conteúdos renderizados. Use uma ferramenta de renderização como o Scrapeless para essas páginas, e mantenha o httpcloak para pontos finais cujo conteúdo já está na resposta.
Q: Como escolho um navegador para emular?
Passe o argumento preset com um nome de navegador incluído, como chrome-146, firefox-133 ou safari-18. O preset define a impressão digital em todas as camadas de uma vez, então mudar de um navegador para outro é uma única alteração de argumento em vez de configuração por camada.
Q: Uma impressão digital de rede é suficiente para evitar bloqueios?
É suficiente para uma verificação de impressão digital e nada mais. Desafios em JavaScript, análise comportamental e reputação de IP são defesas separadas que o httpcloak não aborda, portanto, quando esses estão em jogo, você precisa de renderização, manuseio de desafios ou rotação de proxy além da impressão digital.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



