Neste guia, você aprenderá:
- O que é o cabeçalho User-Agent e por que ele é tão importante
- Qual é o cabeçalho do agente do usuário cURL padrão
- Duas abordagens para definir strings de agente de usuário cURL
- Como implementar a lógica de rotação do agente do usuário no cURL
Vamos começar!
O que é um agente do usuário e por que ele é importante?
Um agente do usuário é uma string que navegadores, aplicativos que fazem solicitações da web e clientes HTTP definem no cabeçalho HTTP User-Agent para identificar o software cliente de onde a solicitação se origina. Essa string normalmente inclui informações como tipo de navegador/aplicativo, sistema operacional e outros detalhes.
Por exemplo, esta é uma string de agente do usuário real de uma solicitação do Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/124.0.0.0 Safari/537.36
As informações neste cabeçalho são essenciais para determinar se as solicitações estão vindo de um navegador conhecido ou de outro software. Os bots de scraping tendem a usar strings de agente do usuário inconsistentes ou padrão, expondo sua natureza automatizada. Assim, o cabeçalho do agente do usuário ajuda as soluções anti-bot a entender se o usuário atual é real ou um bot.
Para obter mais informações, consulte nosso guia sobre agentes de usuário para Scraping de dados.
Qual é o agente de usuário padrão do cURL?
Assim como a maioria dos clientes HTTP, o cURL define o cabeçalho User-Agent ao fazer uma solicitação HTTP. Em detalhes, a string do agente do usuário cURL é:
curl/X.Y.Z
Onde X.Y.Z é a versão do cURL instalada em sua máquina.
Para verificar isso, faça uma solicitação cURL para o endpoint /user-agent do projeto httpbin.io. Essa API retorna a string do cabeçalho User-Agent definida pelo chamador.
Faça uma solicitação GET para /user-agent com o cURL usando a seguinte instrução:
curl "https://httpbin.io/user-agent"
Observação: no Windows, substitua curl por curl.exe. Isso ocorre porque curl é um alias para Invoke-WebRequest no PowerShell, enquanto curl.exe aponta para o executável cURL do Windows.
O endpoint deve retornar algo como isto:
{
"user-agent": "curl/8.4.0"
}
Como você pode ver, o agente do usuário definido pelo cURL é curl/8.4.0. Isso não é bom, pois identifica claramente que a solicitação vem do cURL. As soluções antibot adotadas pelos sites para proteger suas páginas e dados podem facilmente marcar essa solicitação como não proveniente de um usuário real, bloqueando-a de acordo.
É por isso que você precisa saber como definir strings de cabeçalho do agente do usuário cURL.
Como definir o cabeçalho do agente do usuário cURL
Existem duas abordagens para definir um agente do usuário no cURL. Vamos explorar as duas!
Definir um agente de usuário personalizado diretamente
A configuração de agentes de usuário é tão popular que o cURL vem com uma opção específica para isso. Em particular, a opção -A ou –user-agent permite especificar a string a ser definida no cabeçalho User-Agent da solicitação HTTP feita pelo cURL.
Esta é a sintaxe para definir um cabeçalho de agente do usuário cURL usando essa opção:
curl -A|--user-agent "<user-agent_string>" "<url>"
Considere o seguinte exemplo:
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"
A saída 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"
}
Ótimo! O agente do usuário detectado pelo endpoint httpbin.io /user-agent é o mesmo definido na solicitação.
Lembre-se de que a solicitação acima é equivalente a:
curl --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/124.0.0.0 Safari/537.36" "https://httpbin.io/user-agent"
Embora não seja recomendado, para desativar completamente o cabeçalho User-Agent, passe uma string vazia para -A. Verifique isso direcionando o endpoint /headers do httpbin.io, que retorna os cabeçalhos da solicitação recebida:
curl -A "" "https://httpbin.io/headers"
O resultado será:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
]
}
}
Como esperado, não há cabeçalho User-Agent.
Se você quiser manter o cabeçalho User-Agent, mas atribuir a ele um valor em branco, passe uma string com um único espaço para -A:
curl -A " " "https://httpbin.io/headers"
Desta vez, o endpoint retornará:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
],
"User-Agent": [
""
]
}
}
Observe o valor vazio da string User-Agent.
Defina um cabeçalho de agente de usuário personalizado
Afinal, o User-Agent nada mais é do que um cabeçalho HTTP. Isso significa que você pode defini-lo como qualquer outro cabeçalho HTTP no cURL usando a opção -H ou –header:
curl -H|--header "User-Agent: <user-agent_string>" "<url>"
Para um tutorial completo, leia nosso guia sobre como enviar cabeçalhos HTTP com o cURL.
Veja a opção -H em ação no exemplo a seguir:
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"
Observe que os cabeçalhos HTTP são projetados para não diferenciar maiúsculas de minúsculas, portanto, User-Agent é equivalente a user-agent.
O resultado será:
{
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/124.0.0.0 Safari/537.36"
}
Ótimo! O valor do agente do usuário foi definido conforme desejado.
O comando cURL acima é 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 especiais, considere as duas seguintes cadeias de caracteres de cabeçalho do agente do usuário cURL:
- “User-Agent:” para remover o cabeçalho User-Agent da solicitação.
- “User-Agent: ” para definir o cabeçalho User-Agent como uma string em branco.
Implementar rotação de agente de usuário no cURL
Ao fazer solicitações automáticas em escala usando cURL, definir um valor fixo de User-Agent pode não ser suficiente. O problema é que as tecnologias anti-bot monitoram todas as solicitações recebidas. Se elas perceberem muitas solicitações com os mesmos cabeçalhos e do mesmo IP, provavelmente tomarão medidas.
A chave para evitar a detecção e o bloqueio por sites ao fazer solicitações automatizadas é randomizá-las. Nesse sentido, a rotação de agentes de usuário ajuda a simular solicitações de diferentes navegadores. Isso reduz o risco de acionar banimentos temporários ou bloqueios.
Consiga a rotação do agente do usuário cURL com as três etapas a seguir:
- Colete agentes de usuário: reúna uma lista de strings de agentes de usuário reais de vários navegadores, de diferentes versões e em diferentes dispositivos.
- Implemente a lógica de rotação: selecione um agente de usuário aleatório da lista.
- Randomize as solicitações: defina a string do agente do usuário selecionado na solicitação cURL.
A implementação desse procedimento requer algumas linhas de código, portanto, muda de sistemas baseados em Unix para Windows. Descubra como implementar a rotação de agentes de usuário no cURL em ambos os ambientes!
Bash
Colete uma lista de agentes de usuário válidos de um site como User Agent String.com e armazene-a em uma variável 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"
)
Em seguida, implemente uma função que o extraia aleatoriamente 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))
# retorne a string do agente do usuário extraída aleatoriamente
echo "${agentes_usuários[$índice]}"
}
Chame a função, obtenha um agente de usuário rotativo e defina-o no cURL:
# obtenha o agente de usuário aleatório
agente_de_usuário=$(get_random_user_agent)
# execute uma solicitação cURL para a URL fornecida
# usando o agente de usuário aleatório
curl -A "$agente_de_usuário" "https://httpbin.io/user-agent"
Observação: altere a URL de destino de acordo com seus objetivos.
Junte tudo e você obterá o seguinte arquivo bash:
#!/bin/bash
# lista de strings de agentes de usuário
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 usuário na lista
local count=${#user_agents[@]}
# gera um número RANDOM de 0 a count
local index=$((RANDOM % count))
# retorna a string do agente de usuário extraída aleatoriamente
echo "${user_agents[$index]}"
}
# obter o agente de usuário aleatório
agente_de_usuário=$(get_random_user_agent)
# realizar uma solicitação cURL para a URL fornecida
# usando o agente de usuário aleatório
curl -A "$agente_de_usuário" "https://httpbin.io/user-agent"
Execute o script acima e, a cada vez, você verá um agente de usuário diferente. Missão cumprida!
PowerShell
Recupere uma lista de agentes de usuário reais de um site como o WhatIsMyBrowser.com. Em seguida, armazene esses dados em uma variável 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"
)
Em seguida, crie uma função que selecione aleatoriamente uma string de agente do usuário da lista 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
# retorna o agente de usuário extraído aleatoriamente
return $user_agents[$index]
}
Por fim, chame a função, obtenha o agente de usuário aleatório e use-o no cURL:
# obter o agente de usuário aleatório
$user_agent = Get-RandomUserAgent
# fazer uma solicitação HTTP para a URL fornecida
# usando o agente de usuário aleatório
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Junte tudo e você 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
# gera um número aleatório de 0 a $count
$index = Get-Random -Maximum $count
# retorna o agente de usuário extraído aleatoriamente
return $user_agents[$index]
}
# obtém um agente de usuário aleatório
$user_agent = Get-RandomUserAgent
# faz uma solicitação HTTP para a URL fornecida
# usando o agente de usuário aleatório
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Salve-o em um script .ps1 e execute-o algumas vezes. A cada vez, você obterá uma string de agente do usuário diferente.
Et voilà! Agora você é um mestre em definir strings de cabeçalho de agente de usuário cURL.
Conclusão
Neste guia, você viu por que definir o cabeçalho User-Agent em um cliente HTTP é tão importante e como fazer isso no cURL. Dessa forma, você pode enganar alguns sistemas anti-bot, fazendo-os pensar que suas solicitações estão vindo de um navegador relacional. Ao mesmo tempo, soluções anti-bot avançadas ainda serão capazes de bloquear suas solicitações. Para contornar medidas como limitação de taxa, você pode integrar um Proxy ao cURL. No entanto, isso pode não ser suficiente!
Evite todo esse estresse e experimente a API Scraper. Por ser uma API de scraping abrangente, completa e de última geração, ela oferece tudo o que você precisa para realizar solicitações automatizadas na web usando o cURL ou qualquer outro cliente HTTP. Essa solução completa possui rotação de IP e agente do usuário e pode contornar qualquer tecnologia antibot. Fazer solicitações HTTP automatizadas nunca foi tão fácil!
Registre-se agora para uma avaliação gratuita da Infraestrutura de scraping de dados da Bright Data ou converse com um de nossos especialistas em dados sobre nossas soluções de scraping.