Guía del agente de usuario de Wget: configuración y cambio

Aprenda a configurar y cambiar el agente de usuario Wget para mejorar el Scraping web y evitar la detección.
11 min de lectura
Wget
User Agent Guide blog image

Al final de este artículo, sabrás:

  • Qué es un agente de usuario y por qué debe configurarlo en sus solicitudes HTTP
  • El agente de usuario predeterminado establecido por Wget
  • Cómo cambiar la cadena del agente de usuario de Wget
  • Cómo implementar la rotación de agentes de usuario con Wget

¡Empecemos!

Agente de usuario: definición y por qué configurarlo

Un agente de usuario es una cadena establecida en el encabezado HTTP User-Agent por los navegadores, las aplicaciones que realizan solicitudes web y los clientes HTTP para identificar el software cliente desde el que se origina la solicitud. Esta cadena suele contener información como el tipo de navegador o aplicación, el sistema operativo y otros detalles relevantes.

Por ejemplo, este es el agente de usuario establecido por Chrome en el momento de escribir este artículo al visitar páginas web:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/125.0.0.0 Safari/537.36

La información de esta cadena es la siguiente:

  • Mozilla/5.0: Históricamente se utilizaba para indicar la compatibilidad con los navegadores Mozilla, pero ahora es un prefijo común en los agentes de usuario con fines de compatibilidad.
  • Windows NT 10.0; Win64; x64: sistema operativo (Windows NT 10.0), plataforma (Win64) y arquitectura (x64).
  • AppleWebKit/537.36: motor del navegador utilizado por esta versión de Chrome.
  • KHTML, como Gecko: compatibilidad con el motor KHTML y el motor de diseño Gecko utilizados por Mozilla.
  1. Chrome/125.0.0.0: nombre del navegador y su versión.
  2. Safari/537.36: Compatibilidad con Safari.

En otras palabras, el agente de usuario es esencial para determinar si una solicitud proviene de un navegador conocido o de otro software.

Los bots de scraping suelen utilizar cadenas de agente de usuario inconsistentes o predeterminadas, lo que revela su naturaleza automatizada. Como resultado, el encabezado User-Agent ayuda a las soluciones anti-bot, empleadas por los sitios web para proteger sus páginas y datos, a determinar si el usuario actual es genuino o un bot.

Para obtener más información, lea nuestra guía sobre agentes de usuario para el Scraping web.

¿Cuál es el agente de usuario predeterminado de Wget?

Al realizar una solicitud HTTP, Wget establece el encabezado User-Agent con el siguiente valor:

Wget/X.Y.Z

La cadena X.Y.Z coincide con la versión de Wget instalada en su máquina.

Para verificar que la cadena anterior es realmente el agente de usuario de Wget, realice una solicitud GET al punto final httpbin.io /user-agent. Esto devuelve la cadena en el encabezado User-Agent de la solicitud entrante, lo que representa una buena forma de verificar el agente de usuario utilizado por el cliente HTTP.

Realice una solicitud GET a /user-agent con Wget utilizando esta instrucción:

wget -O "response.json" "https://httpbin.io/user-agent"

Nota: En Windows, sustituya wget por wget.exe. Esto es necesario porque wget es un alias de Invoke-WebRequest en PowerShell, mientras que wget.exe apunta al ejecutable de Wget para Windows.

El comando anterior descargará la respuesta devuelta por el punto final y la almacenará en un archivo local response.json que contendrá algo como esto:

{

  "user-agent": "Wget/1.21.4"

}

En este caso, el agente de usuario establecido por Wget es Wget/1.21.4. Como puede imaginar, esto identifica claramente la solicitud como procedente de Wget. Las soluciones antibots podrían marcar fácilmente dicha solicitud como no procedente de un usuario real y bloquearla inmediatamente. Por eso es tan importante conocer algunos métodos para cambiar el agente de usuario de Wget.

Cómo configurar un agente de usuario Wget

Hay dos formas posibles de configurar un agente de usuario en Wget. ¡Exploremos ambas!

Configurar un agente de usuario personalizado directamente

Wget ofrece una opción para cambiar los agentes de usuario. En concreto, la opción -U o –user-agent le permite anular la cadena predeterminada utilizada en el encabezado User-Agent por Wget. Utilice la siguiente sintaxis para configurar una cadena de agente de usuario en Wget:

wget [otras_opciones] -U|--user-agent "<cadena_del_agente_de_usuario>" "<url>"

Ahora, eche un vistazo al siguiente ejemplo:

wget -O "response.json" -U "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

Abre response.json y verás:

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

}

¡Genial, la estrategia de agente de usuario de Wget ha funcionado a las mil maravillas!

No olvides que el comando Wget anterior es equivalente a:

wget.exe -O «response.json» --user-agent «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36» «https://httpbin.io/user-agent»

Para eliminar el encabezado User-Agent de la solicitud, pasa una cadena vacía a -U. Puedes verificarlo dirigiéndote al punto final /headers de httpbin.io, que devuelve los encabezados HTTP de la solicitud entrante:

wget -O "response.json" -U "" "https://httpbin.io/headers"

El archivo response.json contendrá:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ]

  }

}

Como era de esperar, no hay encabezado User-Agent.

Si desea desactivar el encabezado User-Agent, pase un solo espacio a -U:

wget -O "response.json" -U " " "https://httpbin.io/headers"

El contenido de response.json será:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ],

    "User-Agent": [

      ""

    ]

  }

}

El encabezado User-Agent está ahí, pero contiene una cadena vacía, tal y como se desea.

Nota: Eliminar o desactivar el encabezado User-Agent es una mala práctica que puede activar tecnologías antibots.

Establecer un encabezado HTTP User-Agent personalizado

Dado que User-Agent es un encabezado HTTP, puede configurarlo como cualquier otro encabezado en Wget utilizando la opción –header, mediante esta sintaxis:

wget [otras_opciones] --header "User-Agent: <cadena_del_agente_de_usuario>" "<url>"

Vea la opción –header en acción en el siguiente ejemplo:

wget.exe -O response.json --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"

El resultado en response.json será:

{

  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

}

Genial, el valor del agente de usuario en la respuesta coincide con la cadena de la opción –header.

Para desactivar el encabezado del agente de usuario de Wget, utilice el valor del encabezado «User-Agent:». Si necesita eliminar el encabezado por completo, debe utilizar la opción -U, tal y como se ha explicado anteriormente.

Implementar la rotación del agente de usuario con Wget

El uso de un valor de agente de usuario estático, incluso si se trata de un agente de usuario de un navegador real, puede no ser un enfoque eficaz cuando se realizan solicitudes automatizadas con Wget. El problema es que las tecnologías antibots supervisan todas las solicitudes entrantes y, cuando detectan demasiadas solicitudes con los mismos encabezados desde una IP concreta, pueden bloquearla.

La aleatoriedad de las solicitudes es la clave para evitar la detección y el bloqueo. ¿Cómo se puede hacer que las solicitudes sean menos similares entre sí? ¡Utilizando la rotación de agentes de usuario! Este método ayuda a simular solicitudes de diferentes navegadores, lo que reduce el riesgo de activar bloqueos o prohibiciones temporales.

Puede lograr la rotación de agentes de usuario de Wget con el siguiente enfoque de tres pasos:

  1. Recuperar algunos agentes de usuario: recopilar una lista de cadenas de agentes de usuario reales de los navegadores.
  2. Implemente la lógica de rotación: elija al azar un agente de usuario de la lista.
  3. Aleatorizar la solicitud: establecer la cadena del agente de usuario seleccionada en la solicitud de Wget.

La implementación de este procedimiento requiere unas pocas líneas de código, que puede escribir con Unix Bash o Windows PowerShell. También puede lograrlo integrando Wget con Python.

Ahora, profundice en cómo manejar la rotación de agentes de usuario en Wget tanto en sistemas Windows como en sistemas basados en UNIX.

Bash

Reúna una lista de agentes de usuario válidos de un sitio como User Agent String.com y guárdela en una 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 extraiga aleatoriamente una cadena de agente de usuario 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))

    # extraer una cadena de agente de usuario de la lista

    # y devolverla

    echo "${user_agents[$index]}"

}

Llama a la función para obtener un agente de usuario aleatorio y utilízalo en el comando Wget:

# obtener el agente de usuario aleatorio

user_agent=$(get_random_user_agent)

# realizar una solicitud Wget a una URL determinada

# utilizando el agente de usuario aleatorio

wget -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

Nota: Modifica la URL de destino para que se adapte a tus objetivos.

Si lo juntas todo, obtendrás el siguiente script 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))

    # extraer una cadena de agente de usuario de la lista

    # y devolverla

    echo "${user_agents[$index]}"

}

# obtener el agente de usuario aleatorio

user_agent=$(get_random_user_agent)

# realizar una solicitud Wget a una URL determinada

# utilizando el agente de usuario aleatorio

wget -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

Añade el código anterior a un script .sh y ejecútalo. Esto generará un archivo response.json en la misma carpeta del script. Ábrelo y verás el agente de usuario devuelto por el punto final /user-agent. Ejecuta el script otras veces y verás diferentes agentes de usuario.

¡Bien hecho! Rotación del agente de usuario de Wget implementada.

PowerShell

Obtenga una lista de agentes de usuario reales de un sitio como WhatIsMyBrowser.com. A continuación, almacene esas cadenas en una variable de matriz de PowerShell:

$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»

)

Implementa una función que seleccione aleatoriamente una cadena de agente de usuario de la lista utilizando Get-Random y la devuelva:

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

    # extraer una cadena de agente de usuario y devolverla

    return $user_agents[$index]

}

Llama a la función para recuperar una cadena de agente de usuario aleatoria y utilízala en la solicitud Wget:

# obtener el agente de usuario aleatorio

$user_agent = Get-RandomUserAgent

# realizar una solicitud HTTP a una URL determinada 

# utilizando el agente de usuario aleatorio

wget.exe -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

Combine todo para obtener 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

    # extraer una cadena de agente de usuario y devolverla

    return $user_agents[$index]

}

# obtener un agente de usuario aleatorio

$user_agent = Get-RandomUserAgent

# realizar una solicitud HTTP a una URL determinada 

# utilizando el agente de usuario aleatorio

wget.exe -O "response.json" -U "$user_agent" "https://httpbin.io/user-agent"

Guarde la lógica anterior en un script .ps1. Ejecútelo varias veces y obtendrá diferentes cadenas de agente de usuario en el archivo de salida response.json.

¡Et voilà! Ahora ya es un experto en los procedimientos de cambio de agente de usuario de Wget.

Conclusión

En esta guía, has descubierto por qué siempre debes configurar el encabezado User-Agent en un cliente HTTP y cómo hacerlo en Wget. Este enfoque puede engañar a los sistemas antibots simples para que crean que tus solicitudes provienen de navegadores legítimos. Sin embargo, las soluciones antibots avanzadas aún pueden detectar y bloquear tus solicitudes. Para eludir las medidas antiscraping, como la limitación de velocidad, puedes utilizar un Proxy con Wget. Por desgracia, ¡eso puede no ser suficiente!

Evita todo este estrés y prueba Scraper API. Al ser una API de scraping web con todas las funciones, incluye todo lo que necesitas para realizar solicitudes web automatizadas con Wget o cualquier otro cliente HTTP. Esta solución todo en uno puede eludir cualquier tecnología antibots, y también cuenta con funciones de rotación de IP y agente de usuario. ¡Realizar solicitudes automatizadas nunca ha sido tan fácil!

Encuentre el producto perfecto para sus necesidades, regístrese ahora.