En esta guía aprenderás:
- Qué es el encabezado User-Agent y por qué es tan importante
- Cuál es el encabezado de agente de usuario cURL predeterminado
- Dos enfoques para configurar las cadenas de agente de usuario de cURL
- Cómo implementar la lógica de rotación del agente de usuario en cURL
¡Empecemos!
¿Qué es un agente de usuario y por qué es importante?
Un agente de usuario es una cadena que los navegadores, las aplicaciones que realizan solicitudes web y los clientes HTTP establecen en el encabezado HTTP User-Agent para identificar el software cliente del que proviene la solicitud. Esta cadena suele incluir información como el tipo de navegador/aplicación, el sistema operativo y otros detalles.
Por ejemplo, esta es una cadena de agente de usuario real de una solicitud de Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/124.0.0.0 Safari/537.36
La información de este encabezado es fundamental para determinar si las solicitudes provienen de un navegador conocido o de otro software. Los bots de scraping tienden a utilizar cadenas de agente de usuario inconsistentes o predeterminadas, lo que delata su naturaleza automatizada. Por lo tanto, el encabezado del agente de usuario ayuda a las soluciones antibots a comprender si el usuario actual es real o un bot.
Para obtener más información, consulte nuestra guía sobre agentes de usuario para el Scraping web.
¿Cuál es el agente de usuario predeterminado de cURL?
Al igual que la mayoría de los clientes HTTP, cURL establece el encabezado User-Agent al realizar una solicitud HTTP. En concreto, la cadena del agente de usuario de cURL es:
curl/X.Y.Z
Donde X.Y.Z es la versión de cURL instalada en su máquina.
Para verificarlo, realice una solicitud cURL al punto final /user-agent del proyecto httpbin.io. Esta API devuelve la cadena del encabezado User-Agent establecida por el autor de la llamada.
Realice una solicitud GET a /user-agent con cURL utilizando la siguiente instrucción:
curl "https://httpbin.io/user-agent"
Nota: En Windows, sustituya curl por curl.exe. Esto se debe a que curl es un alias de Invoke-WebRequest en PowerShell, mientras que curl.exe apunta al ejecutable de cURL para Windows.
El punto final debería devolver algo como esto:
{
"user-agent": "curl/8.4.0"
}
Como puede ver, el agente de usuario establecido por cURL es curl/8.4.0. Eso no es bueno, ya que identifica claramente que la solicitud proviene de cURL. Las soluciones antibots adoptadas por los sitios para proteger sus páginas y datos podrían marcar fácilmente esa solicitud como no procedente de un usuario real y bloquearla en consecuencia.
Por eso es necesario saber cómo establecer las cadenas de encabezado del agente de usuario de cURL.
Cómo configurar el encabezado del agente de usuario de cURL
Hay dos formas de configurar un agente de usuario en cURL. ¡Veámoslas ambas!
Configurar un agente de usuario personalizado directamente
La configuración de agentes de usuario es tan popular que cURL incluye una opción específica para ello. En concreto, la opción -A o –user-agent le permite especificar la cadena que se configurará en el encabezado User-Agent de la solicitud HTTP realizada por cURL.
Esta es la sintaxis para configurar un encabezado de agente de usuario cURL utilizando esa opción:
curl -A|--user-agent "<user-agent_string>" "<url>"
Considere el siguiente ejemplo:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
El resultado será:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
¡Genial! El agente de usuario detectado por el punto final httpbin.io /user-agent es el mismo que el establecido en la solicitud.
Ten en cuenta que la solicitud anterior es equivalente a:
curl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Aunque no es recomendable, para desactivar completamente el encabezado User-Agent, pase una cadena vacía a -A. Verifíquelo dirigiéndose al punto final /headers de httpbin.io, que devuelve los encabezados de la solicitud entrante:
curl -A "" "https://httpbin.io/headers"
El resultado será:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
]
}
}
Como era de esperar, no hay encabezado User-Agent.
Si, por el contrario, desea conservar el encabezado User-Agent pero asignarle un valor en blanco, pase una cadena de un solo espacio a -A:
curl -A " " "https://httpbin.io/headers"
Esta vez, el punto final devolverá:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
],
"User-Agent": [
""
]
}
}
Observe el valor vacío de la cadena User-Agent.
Establecer un encabezado de agente de usuario personalizado
Al fin y al cabo, User-Agent no es más que un encabezado HTTP. Esto significa que puede configurarlo como cualquier otro encabezado HTTP en cURL utilizando la opción -H o –header:
curl -H|--header "User-Agent: <user-agent_string>" "<url>"
Para obtener un tutorial completo, lea nuestra guía sobre cómo enviar encabezados HTTP con cURL.
Vea la opción -H en acción en el siguiente ejemplo:
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Tenga en cuenta que los encabezados HTTP están diseñados para no distinguir entre mayúsculas y minúsculas, por lo que User-Agent es equivalente a user-agent.
El resultado será:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
¡Genial! El valor del agente de usuario se ha establecido según lo deseado.
El comando cURL anterior es equivalente a:
curl --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Para casos de uso especiales, tenga en cuenta las dos cadenas de encabezado de agente de usuario cURL siguientes:
- “User-Agent:” para eliminar el encabezado User-Agent de la solicitud.
- «User-Agent: » para establecer el encabezado User-Agent como una cadena en blanco.
Implementar la rotación del agente de usuario en cURL
Al realizar solicitudes automáticas a gran escala con cURL, puede que no sea suficiente establecer un valor fijo para el agente de usuario. El problema es que las tecnologías antibots supervisan todas las solicitudes entrantes. Si detectan demasiadas con los mismos encabezados y procedentes de la misma IP, es probable que tomen medidas.
La clave para evitar la detección y el bloqueo por parte de los sitios al realizar solicitudes automatizadas es aleatorizarlas. En este sentido, la rotación de los agentes de usuario ayuda a simular solicitudes de diferentes navegadores. Esto reduce el riesgo de provocar prohibiciones o bloqueos temporales.
Para lograr la rotación de agentes de usuario cURL, siga estos tres pasos:
- Recopilar agentes de usuario: recopilar una lista de cadenas de agentes de usuario reales de varios navegadores, de diferentes versiones y en diferentes dispositivos.
- Implemente la lógica de rotación: seleccione un agente de usuario aleatorio de la lista.
- Aleatorizar las solicitudes: establecer la cadena de agente de usuario seleccionada en la solicitud cURL.
La implementación de este procedimiento requiere unas pocas líneas de código, por lo que cambia de los sistemas basados en Unix a Windows. Descubra cómo implementar la rotación de agentes de usuario en cURL en ambos entornos.
Bash
Recopile una lista de agentes de usuario válidos de un sitio como User Agent String.com y guárdela en una variable de matriz:
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
)
A continuación, implementa una función que lo extraiga aleatoriamente de la lista utilizando RANDOM:
get_random_user_agent() {
# número de agentes de usuario en la lista
local count=${#user_agents[@]}
# genera un número RANDOM entre 0 y count
local index=$((RANDOM % count))
# devuelve la cadena del agente de usuario extraída aleatoriamente
echo "${user_agents[$index]}"
}
Llama a la función, obtén un agente de usuario rotativo y configúralo en cURL:
# obtener el agente de usuario aleatorio
user_agent=$(get_random_user_agent)
# realizar una solicitud cURL a la URL dada
# utilizando el agente de usuario aleatorio
curl -A "$user_agent" "https://httpbin.io/user-agent"
Nota: Cambia la URL de destino según tus objetivos.
Junte todo y obtendrá el siguiente archivo bash:
#!/bin/bash
# lista de cadenas de agente de usuario
user_agents=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0")
get_random_user_agent() {
# número de agentes de usuario en la lista
local count=${#user_agents[@]}
# generar un número ALEATORIO entre 0 y count
local index=$((RANDOM % count))
# devolver la cadena del agente de usuario extraída aleatoriamente
echo "${user_agents[$index]}"
}
# obtener el agente de usuario aleatorio
user_agent=$(get_random_user_agent)
# realizar una solicitud cURL a la URL dada
# utilizando el agente de usuario aleatorio
curl -A "$user_agent" "https://httpbin.io/user-agent"
Ejecute el script anterior y cada vez verá un agente de usuario diferente. ¡Misión cumplida!
PowerShell
Recupera una lista de agentes de usuario reales de un sitio como WhatIsMyBrowser.com. A continuación, almacena esos datos en una variable de matriz:
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"
)
A continuación, cree una función que seleccione aleatoriamente una cadena de agente de usuario de la lista y la devuelva:
función Get-RandomUserAgent {
# número de agentes de usuario en la lista
$count = $user_agents.Count
# genera un número aleatorio entre 0 y $count
$index = Get-Random -Maximum $count
# devuelve el agente de usuario extraído aleatoriamente
return $user_agents[$index]
}
Por último, llama a la función, obtén el agente de usuario aleatorio y utilízalo en cURL:
# obtener el agente de usuario aleatorio
$user_agent = Get-RandomUserAgent
# realizar una solicitud HTTP a la URL dada
# utilizando el agente de usuario aleatorio
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Junte todo y obtendrá el siguiente código:
# lista de agentes de usuario
$user_agents = @(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0"
# ...
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0")
función Get-RandomUserAgent {
# número de agentes de usuario en la lista
$count = $user_agents.Count
# generar un número aleatorio entre 0 y $count
$index = Get-Random -Maximum $count
# devuelve el agente de usuario extraído aleatoriamente
return $user_agents[$index]
}
# obtiene un agente de usuario aleatorio
$user_agent = Get-RandomUserAgent
# realiza una solicitud HTTP a la URL dada
# utilizando el agente de usuario aleatorio
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Guárdalo en un script .ps1 y ejecútalo varias veces. Cada vez, obtendrás una cadena de agente de usuario diferente.
¡Et voilà! Ahora ya es un experto en configurar cadenas de encabezado de agente de usuario cURL.
Conclusión
En esta guía, has visto por qué es tan importante configurar el encabezado User-Agent en un cliente HTTP y cómo hacerlo en cURL. De esta manera, puedes engañar a algunos sistemas antibots haciéndoles creer que tus solicitudes provienen de un navegador relacional. Al mismo tiempo, las soluciones antibots avanzadas seguirán pudiendo bloquear tus solicitudes. Para evitar medidas como la limitación de velocidad, podrías integrar un Proxy en cURL. Sin embargo, ¡eso puede no ser suficiente!
Evita todo este estrés y prueba Scraper API. Al ser una API de scraping integral, de última generación y todo en uno, te ofrece todo lo que necesitas para realizar solicitudes web automatizadas utilizando cURL o cualquier otro cliente HTTP. Esta solución con todas las funciones incluye rotación de IP y agente de usuario, y puede eludir cualquier tecnología antibots. ¡Realizar solicitudes HTTP automatizadas nunca ha sido tan fácil!
Regístrese ahora para obtener una prueba gratuita de la infraestructura de scraping web de Bright Data o hable con uno de nuestros expertos en datos sobre nuestras soluciones de scraping.