Explicado
La cabecera User-Agent es una de las piezas de identificación más antiguas de la web. Cada solicitud HTTP que envía un cliente incluye una línea `User-Agent:` que nombra el software cliente (navegador o biblioteca), su versión, el sistema operativo y a menudo el motor de renderizado. Los servidores la utilizan para la negociación de contenido (diseños móviles frente a escritorio), análisis y, cada vez más, detección de bots.
Para el scraping, el User-Agent es la señal más sencilla que puede configurar incorrectamente. Los User-Agents predeterminados de las bibliotecas HTTP comunes (`python-requests/2.31.0`, `axios/1.5.0`, `okhttp/4.10.0`) son señales evidentes. Incluso el User-Agent predeterminado de Playwright y Puppeteer contiene `HeadlessChrome`, que los sistemas anti-bot marcan al instante.
La solución ingenua es establecer un UA de Chrome en cada solicitud. El problema es que el User-Agent por sí solo no es suficiente: la toma de huellas moderna cruza el UA con las sugerencias de cliente `sec-ch-ua`, la huella TLS, el objeto navigator de JavaScript y la cabecera Accept-Language. Establecer un UA de Chrome pero dejar expuesto el protocolo de enlace TLS de Python crea una señal de alerta mayor que simplemente dejar el UA predeterminado.
Cómo funciona
Cuando su cliente abre una conexión a un servidor, la línea de solicitud incluye cabeceras. La línea `User-Agent` es una de ellas. Los servidores la analizan (o simplemente la registran) y enrutan la solicitud en función de lo que ven. Un User-Agent moderno de Chrome en Windows tiene este aspecto: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`. El prefijo 'Mozilla/5.0' es histórico; todos los navegadores lo envían por razones de compatibilidad con versiones anteriores.
Los navegadores reales también envían cabeceras `sec-ch-ua` (sugerencias de cliente 'Sec-CH-UA') en HTTP moderno, que contienen datos estructurados del navegador, versión y plataforma. Los sistemas anti-bot los comparan con la cadena User-Agent y marcan las inconsistencias. Por lo tanto, la rotación de User-Agent debe ir acompañada de actualizaciones coherentes de `sec-ch-ua-*` y huellas TLS coincidentes.