Saltar al contenido

Proxies y geoip

Haz que el navegador salga por tu propio proxy, incluido SOCKS5 con usuario y contraseña en el build con licencia, y deja que geoip ajuste la zona horaria, el idioma y la dirección de WebRTC a la IP de salida del proxy.

Ajuste automático a la región del proxy (geoip)

Pasa geoip junto con un proxy y el SDK resuelve la IP de salida del proxy —consultándola en la base de datos offline geoip-all-in-one— y configura para esa región una combinación coherente de zona horaria + idioma principal de navigator + Accept-Language + IP de WebRTC. Se acabó ajustar a mano la zona horaria de 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
)

También configura la geolocalización y la lista completa de navigator.languages para la región, funciona con proxies HTTP y SOCKS5 (credenciales incluidas) y está en los tres SDK (Geoip = true en .NET). La primera ejecución descarga la base de datos (unos 50 MB). Si no se puede resolver la región, el lanzamiento se detiene con un GeoipError en lugar de arrancar sin avisar con el reloj y el idioma de esta máquina; define tanto timezone como acceptLanguage para lanzar de todos modos. La consulta tiene 20 segundos de plazo (CLEARCOTE_GEOIP_TIMEOUT_SECONDS); en .NET el error es GeoipException. Sin geoip ni un timezone explícito, la zona horaria sigue al idioma: en-US significa Nueva York, incluso detrás de un proxy alemán.

¿Prefieres configurarlo tú? Usa acceptLanguage (Node) / accept_language (Python), por ejemplo "en-US,en": define el header Accept-Language, el array completo navigator.languages y navigator.language, y Intl / toLocaleString también lo siguen.

SOCKS5 con credenciales

Chromium estándar no puede autenticarse en absoluto en un proxy SOCKS5 —no implementa la subnegociación de usuario/contraseña—, así que la solución habitual es un relay local que guarda las credenciales. El build con licencia lo implementa en el motor (RFC 1929), así que no hace falta ningún relay. Pasa el usuario y la contraseña como campos separados o dentro de la dirección (socks5://user:pass@host:port); de cualquiera de las dos formas, el SDK se los pasa al motor. Las credenciales dentro de la dirección requieren el SDK 0.31.1 o posterior: los SDK anteriores dejaban que Playwright las descartara, y el proxy no recibía ningún login.

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

Requiere el build con licencia (Gratis con GitHub o Pro, motor 151 r14 o posterior); el build abierto no puede autenticarse en un proxy SOCKS5, así que con él usa un relay local o un proxy HTTP.

Verifica siempre la dirección de salida antes de confiar en una sesión. Un proxy que falla en modo abierto sin avisar envía el tráfico desde tu propia IP, y todas las demás precauciones dejan de servir. Compruébala una vez al lanzar contra un servicio que te devuelva tu dirección, en lugar de darla por supuesta.