Pular para o conteúdo

Proxies e geoip

Envie o navegador por um proxy seu, inclusive SOCKS5 com usuário e senha no build licenciado, e deixe ogeoip ajustar o fuso horário, o idioma e o endereço do WebRTC ao IP de saída do proxy.

Ajuste automático à região do proxy (geoip)

Passe geoip junto com um proxy e o SDK resolve o IP de saída do proxy — consultado no banco de dados offline geoip-all-in-one — e define fuso horário + idioma principal do navigator + Accept-Language + IP do WebRTC coerentes com essa região. Chega de ajustar o fuso horário à mão para cada proxy:

from clearcote import launch

browser = launch(
    fingerprint="user-7423",
    proxy={"server": "http://host:8080", "username": "u", "password": "p"},
    geoip=True,  # timezone + language auto-matched to the proxy's region
)

Ele também define a geolocalização e a lista completa de navigator.languages da região, funciona com proxies HTTP e SOCKS5 (inclusive com credenciais) e está nos três SDKs (Geoip = true no .NET). A primeira execução baixa o banco de dados (cerca de 50 MB). Se a região não puder ser resolvida, a inicialização para com um GeoipError, em vez de subir silenciosamente com o relógio e o idioma desta máquina; defina timezone e acceptLanguage para iniciar mesmo assim. A consulta tem 20 segundos (CLEARCOTE_GEOIP_TIMEOUT_SECONDS); no .NET, o erro é GeoipException. Sem geoip nem um timezone explícito, o fuso horário segue o idioma — en-US significa Nova York, mesmo atrás de um proxy alemão.

Prefere definir você mesmo? Use acceptLanguage (Node) / accept_language (Python), por exemplo "en-US,en" — ele define o header Accept-Language, o array completo navigator.languages e navigator.language — e Intl / toLocaleString também o seguem.

SOCKS5 com credenciais

O Chromium padrão simplesmente não consegue se autenticar num proxy SOCKS5 — ele não implementa a subnegociação de usuário/senha —, então a solução usual é um relay local que guarda as credenciais. O build licenciado implementa isso no motor (RFC 1929), então não é preciso relay. Passe o usuário e a senha como campos separados ou dentro do endereço (socks5://user:pass@host:port); de um jeito ou de outro, o SDK os entrega ao motor. Credenciais dentro do endereço exigem o SDK 0.31.1 ou mais recente: SDKs mais antigos deixavam o Playwright descartá-las, e o proxy não recebia login nenhum.

from clearcote import launch_persistent_context

ctx = launch_persistent_context(
    "./profile",
    proxy={"server": "socks5://proxy.example.net:1080", "username": "user", "password": "pass"},
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://api.ipify.org?format=json")   # confirm the exit IP is the proxy's

Exige o build licenciado (Grátis com GitHub ou Pro, motor 151 r14 ou mais recente); o build aberto não consegue se autenticar num proxy SOCKS5, então use com ele um relay local ou um proxy HTTP.

Sempre verifique o endereço de saída antes de confiar numa sessão. Um proxy que falha em modo aberto sem avisar envia o tráfego pelo seu próprio IP, e todas as outras precauções perdem o sentido. Confira uma vez, na inicialização, com um serviço que devolve o seu endereço IP, em vez de presumir.