El header `User-Agent` es uno de los encabezados más importantes y utilizados en las solicitudes HTTP. Este header permite que el servidor identifique el tipo de cliente que está realizando la solicitud, como un navegador web, una aplicación móvil, o un script de Python utilizando la biblioteca `requests`.
En este post, te explico qué es el `User-Agent`, cómo personalizarlo en tus solicitudes con `requests`, y cómo puedes encontrar tu propio `User-Agent` en tu navegador web.
El `User-Agent` es un encabezado HTTP que envía información sobre el cliente que está realizando la solicitud. Los servidores utilizan este header para entender qué tipo de dispositivo, sistema operativo, y navegador o aplicación está realizando la solicitud. Con base en esta información, el servidor puede personalizar las respuestas, optimizar contenido, o incluso bloquear ciertas solicitudes dependiendo del `User-Agent`.
Cuando utilizas `requests` es común que necesites personalizar el header, especialmente cuando interactúas con APIs o sitios web que requieren que las solicitudes parezcan venir de un navegador real.
Puedes personalizar el header `User-Agent` en `requests` al incluirlo en el diccionario de `headers` que envías con la solicitud.
Ejemplo básico:
url = 'https://url.ejemplo.com/data'
encabezados = {'User-Agent': 'my-app/1.0'}
respuesta = requests.get(url, headers=encabezados)
print(respuesta.text)
En este caso, el header `User-Agent` enviado con la solicitud será 'my-app/1.0'. Esto puede ser útil cuando estás desarrollando una aplicación que necesita identificarse con una versión específica.
Si deseas hacer que tu script de Python parezca un navegador real (por ejemplo, para hacer scraping o interactuar con sitios web que bloquean agentes desconocidos), puedes obtener el `User-Agent` de tu navegador.
La forma más sencilla de hacerlo es buscar en Google "My user agent". El buscador te devolverá algo como esto:
Simplemente puedes copiar todas esa información y colocarla como el valor de la clave "User-Agent" en el diccionario de tus headers, como verás en el siguiente apartado.
Una vez que tengas el `User-Agent` de tu navegador, puedes copiarlo y utilizarlo en tus solicitudes de `requests` en Python para que tus solicitudes parezcan provenir de un navegador real.
Ejemplo:
url = 'https://ejemplo.com'
encabezado = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
respuesta = requests.get(url, headers=encabezado)
print(respuesta.text)
Esto puede ser útil para evitar bloqueos cuando trabajas con scraping o interactúas con APIs que esperan solicitudes provenientes de un navegador.
Además de simplemente copiar el `User-Agent` de tu navegador, puedes crear uno completamente personalizado para describir mejor tu aplicación o proyecto.
Ejemplo:
encabezados = {'User-Agent': 'mi-bot/1.0 (+https://mi-sitio.com/bot-info)'}
Aquí estamos utilizando un formato de `User-Agent` común que incluye el nombre de la aplicación (`mi-bot`), la versión (`1.0`), y una URL opcional con información sobre el bot.
1. Evitar el Bloqueo de Scrapers: Algunos sitios web bloquean solicitudes provenientes de scripts o bots cuando detectan `User-Agents` como `python-requests`. Cambiar el `User-Agent` puede ayudarte a evitar estos bloqueos.
2. Comportamiento Diferente de Servidores: Algunos servidores responden de manera diferente dependiendo del `User-Agent`. Por ejemplo, pueden devolver contenido más ligero para dispositivos móviles o contenido especializado para bots de motores de búsqueda.
3. Cumplir con las Políticas del Sitio: Si estás haciendo scraping o interactuando con un sitio web de manera automatizada, asegúrate de revisar su política de uso, ya que algunos sitios pueden prohibir este tipo de interacciones incluso si cambias el `User-Agent`.
Aunque el `User-Agent` se maneja dentro del parámetro `headers` en `requests`, no es un objeto por sí solo. Puedes agregarlo fácilmente a cualquier solicitud HTTP (como `GET`, `POST`, `PUT`, etc.) mediante el diccionario de headers.
Ejemplo para `POST`:
encabezados = {'User-Agent': 'mi-app/1.0'}
info = {'clave': 'valor'}
respuesta = requests.post('https://url.ejemplo.com/enviar', data=info, headers=encabezados)
Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn
Puedes descargar GRATIS mi manual completo en pdf de Python Rápido