Guia do agente do usuário Wget: configuração e alteração

Aprenda a definir e alterar o agente de usuário Wget para melhorar o Scraping de dados da web e evitar a detecção.
12 min de leitura
Wget
User Agent Guide blog image

Ao final deste artigo, você saberá:

  • O que é um agente de usuário e por que você deve defini-lo em suas solicitações HTTP
  • O agente do usuário padrão definido pelo Wget
  • Como alterar a string do agente do usuário do Wget
  • Como implementar a rotação do agente do usuário com o Wget

Vamos começar!

Agente do usuário: definição e por que configurá-lo

Um agente do usuário é uma string definida no cabeçalho HTTP User-Agent por navegadores, aplicativos que fazem solicitações da web e clientes HTTP para identificar o software cliente do qual a solicitação se origina. Essa string geralmente contém informações como o tipo de navegador ou aplicativo, sistema operacional e outros detalhes relevantes.

Por exemplo, este é o agente do usuário definido pelo Chrome no momento da redação deste artigo ao visitar páginas da web:

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

As informações nesta sequência são:

  • Mozilla/5.0: historicamente usado para indicar compatibilidade com navegadores Mozilla, mas agora um prefixo comum em agentes do usuário para fins de compatibilidade.
  • Windows NT 10.0; Win64; x64: Sistema operacional (Windows NT 10.0), plataforma (Win64) e arquitetura (x64).
  • AppleWebKit/537.36: Mecanismo do navegador usado por esta versão do Chrome.
  • KHTML, como Gecko: compatibilidade com o mecanismo KHTML e o mecanismo de layout Gecko usado pelo Mozilla.
  1. Chrome/125.0.0.0: Nome do navegador e sua versão.
  2. Safari/537.36: compatibilidade com o Safari.

Em outras palavras, o agente do usuário é essencial para determinar se uma solicitação vem de um navegador conhecido ou de outro software.

Os bots de scraping costumam usar strings de agente do usuário inconsistentes ou padrão, revelando sua natureza automatizada. Como resultado, o cabeçalho User-Agent ajuda as soluções anti-bot — empregadas por sites para proteger suas páginas e dados — a determinar se o usuário atual é genuíno ou um bot.

Para obter mais informações, leia nosso guia sobre agentes de usuário para Scraping de dados.

Qual é o agente de usuário padrão do Wget?

Ao fazer uma solicitação HTTP, o Wget define o cabeçalho User-Agent com o seguinte valor:

Wget/X.Y.Z

A string X.Y.Z corresponde à versão do Wget instalada em sua máquina.

Para verificar se a string acima é realmente o agente de usuário do Wget, execute uma solicitação GET para o endpoint httpbin.io /user-agent. Isso retorna a string no cabeçalho User-Agent da solicitação recebida, representando uma boa maneira de verificar o agente de usuário usado pelo cliente HTTP.

Faça uma solicitação GET para /user-agent com o Wget usando esta instrução:

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

Observação: no Windows, substitua wget por wget.exe. Isso é necessário porque wget é um alias para Invoke-WebRequest no PowerShell, enquanto wget.exe aponta para o executável do Wget Windows.

O comando anterior baixará a resposta retornada pelo endpoint e a armazenará em um response.json local contendo algo como isto:

{

  "user-agent": "Wget/1.21.4"

}

Nesse caso, o agente do usuário definido pelo Wget é Wget/1.21.4. Como você pode imaginar, isso identifica claramente a solicitação como originária do Wget. As soluções antibot podem facilmente sinalizar essa solicitação como não proveniente de um usuário real e bloqueá-la imediatamente. É por isso que é tão importante conhecer algumas abordagens do Wget para alterar o agente do usuário!

Como definir um agente do usuário Wget

Existem duas maneiras possíveis de definir um agente do usuário no Wget. Vamos explorar ambas!

Definir um agente de usuário personalizado diretamente

O Wget oferece uma opção para alterar agentes de usuário. Mais especificamente, a opção -U ou –user-agent permite substituir a string padrão usada no cabeçalho User-Agent pelo Wget. Use a seguinte sintaxe para definir uma string de agente de usuário no Wget:

wget [outras_opções] -U|--user-agent "<string_do_agente_do_usuário>" "<url>"

Agora, veja o exemplo abaixo:

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"

Abra response.json e você verá:

{

  "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"

}

Ótimo, a estratégia do agente do usuário definido pelo Wget funcionou perfeitamente!

Não se esqueça de que o comando Wget anterior é 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 remover o cabeçalho User-Agent da solicitação, passe uma string vazia para -U. Você pode verificar isso direcionando o endpoint /headers do httpbin.io, que retorna os cabeçalhos HTTP da solicitação recebida:

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

O arquivo response.json conterá:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ]

  }

}

Como esperado, não há cabeçalho User-Agent.

Se você quiser desativar o cabeçalho User-Agent, passe um único espaço para -U:

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

O conteúdo em response.json será:

{

  "headers": {

    "Accept": [

      "*/*"

    ],

    "Accept-Encoding": [

      "identity"

    ],

    "Connection": [

      "Keep-Alive"

    ],

    "Host": [

      "httpbin.io"

    ],

    "User-Agent": [

      ""

    ]

  }

}

O cabeçalho User-Agent está presente, mas contém uma string vazia, conforme desejado.

Observação: excluir ou desativar o cabeçalho User-Agent é uma prática inadequada que pode acionar tecnologias antibots.

Definir um cabeçalho HTTP User-Agent personalizado

Como o User-Agent é um cabeçalho HTTP, você pode defini-lo como qualquer outro cabeçalho no Wget usando a opção –header, através desta sintaxe:

wget [outras_opções] --header "User-Agent: <string_do_agente_do_usuário>" "<url>"

Veja a opção –header em ação no exemplo abaixo:

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"

O resultado em 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"

}

Ótimo, o valor do agente do usuário na resposta corresponde à string na opção –header.

Para desativar o cabeçalho do agente do usuário Wget, use o valor do cabeçalho “User-Agent:”. Se precisar remover o cabeçalho completamente, você deve usar a opção -U, conforme explicado anteriormente.

Implementar a rotação do agente do usuário com o Wget

Usar um valor estático de agente do usuário, mesmo que seja um agente do usuário de um navegador real, pode não ser uma abordagem bem-sucedida ao fazer solicitações automatizadas com o Wget. O problema é que as tecnologias antibot monitoram todas as solicitações recebidas e, quando detectam muitas solicitações com os mesmos cabeçalhos de um IP específico, podem bani-lo.

A aleatoriedade das solicitações é a chave para evitar a detecção e o bloqueio. Como as solicitações podem ser menos semelhantes entre si? Usando a rotação do agente do usuário! Esse método ajuda a simular solicitações de diferentes navegadores, reduzindo o risco de acionar bloqueios ou banimentos temporários.

Você pode realizar a rotação do agente do usuário Wget com a seguinte abordagem em três etapas:

  1. Recuperar alguns agentes de usuário: colete uma lista de strings de agentes de usuário reais dos navegadores.
  2. Implemente a lógica de rotação: escolha aleatoriamente um agente de usuário da lista.
  3. Randomize a solicitação: defina a string do agente do usuário selecionado na solicitação Wget.

A implementação desse procedimento requer algumas linhas de código, que você pode escrever com o Unix Bash ou o Windows PowerShell. Você também pode fazer isso integrando o Wget com o Python.

Agora, veja como lidar com a rotação do agente do usuário no Wget em sistemas baseados em Windows e UNIX!

Bash

Reúna uma lista de agentes de usuário válidos em um site como o User Agent String.com e armazene-a em uma 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"

)

Em seguida, crie uma função que extraia aleatoriamente uma string de agente do usuário da lista usando RANDOM:

get_random_user_agent() {

    # número de agentes de usuário na lista

    local count=${#user_agents[@]}

    # gera um número RANDOM de 0 a count

    local index=$((RANDOM % count))

    # extrair uma string de agente do usuário da lista

    # e retorná-la

    echo "${agentes_usuários[$índice]}"

}

Chame a função para obter um agente de usuário aleatório e use-o no comando Wget:

# obtenha o agente de usuário aleatório

user_agent=$(get_random_user_agent)

# execute uma solicitação Wget para uma determinada URL

# usando o agente de usuário aleatório

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

Observação: modifique a URL de destino para se adequar aos seus objetivos.

Junte tudo e você obterá o seguinte script bash:

#!/bin/bash

# lista de strings de agentes de usuário

agentes_de_usuário=(

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como 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 usuário na lista

    local count=${#user_agents[@]}

    # gera um número RANDOM de 0 a count

    local index=$((RANDOM % count))

    # extrai uma string de agente de usuário da lista

    # e a retorna

    echo "${user_agents[$index]}"

}

# obter o agente de usuário aleatório

user_agent=$(get_random_user_agent)

# realizar uma solicitação Wget para uma determinada URL

# usando o agente de usuário aleatório

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

Adicione o código acima a um script .sh e execute-o. Isso produzirá um arquivo response.json na mesma pasta do script. Abra-o e veja o agente do usuário retornado pelo endpoint /user-agent. Execute o script outras vezes e você verá diferentes agentes do usuário.

Muito bem! Rotação do agente do usuário Wget implementada.

PowerShell

Obtenha uma lista de agentes de usuário reais em um site como o WhatIsMyBrowser.com. Em seguida, armazene essas strings em uma variável de matriz do 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"

)

Implemente uma função que selecione aleatoriamente uma string de agente do usuário da lista usando Get-Random e a retorne:

função Get-RandomUserAgent {

    # número de agentes de usuário na lista

    $count = $user_agents.Count

    # gera um número aleatório de 0 a $count

    $index = Get-Random -Maximum $count

    # extrai uma string de agente de usuário e a retorna

    return $user_agents[$index]

}

Chame a função para recuperar uma string de agente de usuário aleatória e use-a na solicitação Wget:

# obter o agente de usuário aleatório

$user_agent = Get-RandomUserAgent

# fazer uma solicitação HTTP para uma determinada URL 

# usando o agente de usuário aleatório

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

Junte tudo para obter o seguinte código:

# lista de agentes de usuário

$agentes_de_usuário = @(

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como 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")



função Get-RandomUserAgent {

    # número de agentes de usuário na lista

    $count = $user_agents.Count

    # gerar um número aleatório de 0 a $count

    $index = Get-Random -Maximum $count

    # extrair uma string de agente do usuário e retorná-la

    return $user_agents[$index]

}

# obter um agente de usuário aleatório

$user_agent = Get-RandomUserAgent

# fazer uma solicitação HTTP para uma determinada URL 

# usando o agente de usuário aleatório

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

Armazene a lógica acima em um script .ps1. Execute-o algumas vezes e você obterá diferentes strings de agente do usuário no arquivo de saída response.json.

Et voilà! Agora você é um mestre nos procedimentos de alteração do agente do usuário do Wget.

Conclusão

Neste guia, você explorou por que deve sempre definir o cabeçalho User-Agent em um cliente HTTP e como fazer isso no Wget. Essa abordagem pode enganar sistemas anti-bot simples, fazendo-os acreditar que suas solicitações estão vindo de navegadores legítimos. No entanto, soluções anti-bot avançadas ainda podem detectar e bloquear suas solicitações. Para contornar medidas anti-scraping, como limitação de taxa, você pode usar um Proxy com o Wget. Infelizmente, isso pode não ser suficiente!

Evite todo esse estresse e experimente a API Scraper. Por ser uma API de scraping completa, ela vem com tudo o que você precisa para realizar solicitações automatizadas na web com o Wget ou qualquer outro cliente HTTP. Essa solução completa pode contornar qualquer tecnologia antibot, oferecendo também recursos de rotação de IP e agente do usuário. Fazer solicitações automatizadas nunca foi tão fácil!

Encontre o produto perfeito para suas necessidades, registre-se agora.