O User-Agent (UA) é um campo de cabeçalho HTTP que identifica ao servidor o software cliente que originou a requisição, como um navegador web, um aplicativo móvel ou um bot.
O que é um User-Agent?
A string de User-Agent é uma string de texto característica incluída nos cabeçalhos HTTP das requisições do cliente. Seu objetivo principal é informar ao servidor o tipo de cliente, o sistema operacional, o fornecedor do software e/ou a versão do software. Os servidores podem então usar essa informação para entregar conteúdo otimizado para o cliente específico, registrar estatísticas de clientes ou implementar controle de acesso.
Estrutura da string de User-Agent
Embora não exista um formato único e rígido, as strings de User-Agent geralmente seguem um padrão, muitas vezes começando com Mozilla/5.0 por razões históricas, seguido por detalhes da plataforma, do sistema operacional e do navegador.
Exemplo de string de User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Decomposição de uma string de User-Agent típica:
Mozilla/5.0: Token histórico, que indica compatibilidade com o motor de renderização da Mozilla. A maioria dos navegadores modernos o inclui por compatibilidade.(Windows NT 10.0; Win64; x64): Informações de plataforma.Windows NT 10.0: Sistema operacional (Windows 10).Win64: Arquitetura de CPU (Windows de 64 bits).x64: Arquitetura de CPU (processador de 64 bits).
AppleWebKit/537.36 (KHTML, like Gecko): Informações do motor de renderização.AppleWebKit/537.36: Indica o uso do motor de renderização AppleWebKit, comum no Chrome e no Safari.KHTML, like Gecko: Outros tokens históricos de compatibilidade. O KHTML foi a base do WebKit, e o Gecko é o motor da Mozilla.
Chrome/120.0.0.0: Identificação e versão do navegador.Safari/537.36: Identificação secundária do navegador, frequentemente incluída pelo Chrome por compatibilidade com sites que esperam o Safari.
Como o User-Agent funciona em requisições HTTP
Quando um cliente (por exemplo, um navegador web ou um script) inicia uma requisição HTTP a um servidor, ele inclui diversos cabeçalhos. Um deles é o cabeçalho User-Agent.
- Requisição do cliente: O cliente monta uma requisição HTTP, preenchendo automaticamente o cabeçalho
User-Agentcom sua string padrão. - Recepção pelo servidor: O servidor recebe a requisição e analisa seus cabeçalhos, incluindo o
User-Agent. - Processamento no servidor: Com base na string de
User-Agent, o servidor pode:- Servir conteúdo diferente: Entregar uma versão da página otimizada para celular a um User-Agent de navegador móvel, ou uma versão desktop a um User-Agent de navegador desktop.
- Aplicar estilos/scripts específicos: Adaptar o CSS ou o JavaScript a peculiaridades conhecidas de navegadores.
- Registrar estatísticas de clientes: Acompanhar o uso de navegadores, a distribuição de sistemas operacionais e a atividade de bots.
- Implementar medidas de segurança: Bloquear ou desafiar requisições de User-Agents maliciosos conhecidos ou associados a ferramentas automatizadas de scraping.
- Redirecionar ou bloquear o acesso: Negar acesso a determinados recursos com base no tipo de cliente percebido.
O papel dos serviços de proxy
Um serviço de proxy atua como intermediário entre o cliente e o servidor de destino. Quando um cliente envia uma requisição através de um proxy, o proxy pode interceptar e modificar os cabeçalhos HTTP, incluindo a string de User-Agent, antes de encaminhar a requisição ao servidor de destino. Essa modificação permite que o cliente apresente ao servidor uma identidade diferente da original.
Por que mudar o seu User-Agent?
Modificar a string de User-Agent é uma prática comum em diversos cenários técnicos, muitas vezes viabilizada por serviços de proxy.
1. Web scraping e coleta de dados
A extração automatizada de dados de sites frequentemente esbarra em mecanismos anti-bot que analisam as strings de User-Agent.
* Contornar a detecção anti-bot: Muitos sites identificam e bloqueiam requisições de User-Agents genéricos ou conhecidos de bots (por exemplo, Python-requests/2.25.1, curl/7.64.1). Ao rotacionar por um pool de User-Agents realistas de navegadores, os scrapers conseguem imitar tráfego de usuários legítimos, reduzindo a probabilidade de detecção e bloqueio.
* Acessar dados específicos de dispositivo: Os sites podem renderizar conteúdo ou estruturas diferentes para navegadores móveis e desktop. Alterar o User-Agent permite que os scrapers solicitem e coletem explicitamente dados da visualização móvel ou desktop desejada.
* Obter dados consistentes: Alguns sistemas de teste A/B ou de personalização de conteúdo se baseiam no User-Agent. Usar um User-Agent específico e consistente garante que o scraper sempre receba a mesma versão do conteúdo, favorecendo a consistência dos dados.
2. Testes e desenvolvimento
Os desenvolvedores usam a modificação do User-Agent para garantia de qualidade e depuração.
* Testes de compatibilidade entre navegadores/dispositivos: Os desenvolvedores podem simular diferentes navegadores (Chrome, Firefox, Safari), sistemas operacionais (Windows, macOS, Linux) e tipos de dispositivo (desktop, tablet, celular) para testar como um site ou aplicativo é renderizado e funciona em vários ambientes, sem precisar de múltiplos dispositivos físicos ou máquinas virtuais.
* Depurar problemas específicos de navegador: Quando um bug aparece apenas em um navegador específico, alterar o User-Agent permite ao desenvolvedor replicar o ambiente e depurar o problema.
* Testar redirecionamentos móvel/desktop: Verificar se os redirecionamentos do lado do servidor baseados em User-Agent encaminham corretamente os usuários para a versão apropriada do site.
3. Privacidade e anonimato
Modificar o User-Agent contribui para uma estratégia mais ampla de reforço da privacidade online.
* Reduzir o fingerprinting do navegador: A string de User-Agent é um dos componentes da impressão digital única de um navegador, que os sites podem usar para rastrear usuários. Ao alterar ou randomizar os User-Agents com frequência, os usuários dificultam que os sites construam um perfil persistente baseado nesse cabeçalho.
* Ocultar detalhes do cliente: Um User-Agent modificado impede que o servidor de destino identifique com precisão o software cliente, o sistema operacional e a versão reais, aumentando assim o anonimato.
4. Contornar restrições de acesso
Os servidores podem implementar controles de acesso com base no cliente percebido.
* Conteúdo com restrição geográfica (em conjunto com proxies de IP): Embora o User-Agent sozinho não mude a localização, alguns serviços podem combinar verificações de User-Agent com a localização do IP. Um User-Agent realista combinado com um IP de proxy da região-alvo apresenta um perfil mais convincente.
* Bloqueio específico por site: Alguns sites bloqueiam versões antigas de navegadores ou User-Agents específicos de bots. Alterar o User-Agent para um navegador atual e comum pode contornar essas restrições.
* Acessar as versões móvel/desktop: Alguns sites redirecionam automaticamente com base no User-Agent. Definir explicitamente um User-Agent móvel pode forçar um site a servir sua versão móvel, mesmo em um desktop, e vice-versa.
5. Pesquisa e analytics
Pesquisadores podem precisar simular ambientes de usuário específicos ou coletar dados sob condições diferentes.
* Pesquisa de mercado: Entender como os sites apresentam conteúdo a usuários com dispositivos ou navegadores específicos.
* Pesquisa de segurança: Analisar como as aplicações web respondem a diversas strings de User-Agent, inclusive malformadas ou incomuns, para identificar vulnerabilidades potenciais.
Como mudar o User-Agent com um serviço de proxy
Ao usar um serviço de proxy, o cabeçalho User-Agent é modificado no nível do proxy antes de a requisição chegar ao servidor de destino. Isso garante que o servidor de destino veja apenas o User-Agent fornecido pelo proxy, e não o User-Agent do cliente original.
1. Proxies HTTP/SOCKS5 (injeção manual de cabeçalho)
Em proxies que apenas encaminham requisições, a própria aplicação cliente precisa definir o cabeçalho User-Agent. O proxy então encaminha esse cabeçalho modificado.
Exemplo usando a biblioteca requests do Python:
import requests
target_url = "http://httpbin.org/user-agent" # Um serviço que devolve o User-Agent recebido
# Define a string de User-Agent desejada
custom_user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1"
# Define os dados do proxy
proxy_url = "http://user:[email protected]:port" # Substitua pelos dados do seu proxy
# Monta os cabeçalhos com o User-Agent personalizado
headers = {
"User-Agent": custom_user_agent
}
# Monta o dicionário de proxies
proxies = {
"http": proxy_url,
"https": proxy_url,
}
try:
response = requests.get(target_url, headers=headers, proxies=proxies, timeout=10)
response.raise_for_status() # Lança um HTTPError para respostas com erro (4xx ou 5xx)
print("Response from target server:")
print(response.json())
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
Neste exemplo, a biblioteca requests envia o User-Agent especificado no dicionário headers. A requisição é então roteada através do proxy definido no dicionário proxies. O servidor de destino (httpbin.org) receberá a string custom_user_agent.
2. Smart proxies / APIs de proxy (gerenciamento automatizado)
Alguns serviços ou APIs de proxy avançados oferecem gerenciamento embutido de User-Agent, rotacionando ou definindo User-Agents automaticamente, sem configuração explícita do lado do cliente além da requisição inicial ao proxy.
- Injeção de cabeçalho: O serviço de proxy pode ter uma opção para injetar automaticamente um User-Agent específico ou aleatório caso o cliente não forneça nenhum, ou para sobrescrever o User-Agent do cliente.
- Parâmetros de API: Algumas APIs de proxy permitem especificar o User-Agent desejado como um parâmetro na própria chamada da API.
Exemplo conceitual (proxy controlado por API):
import requests
# Supondo um endpoint hipotético de API de proxy
proxy_api_url = "https://api.proxyprovider.com/request"
target_url = "http://httpbin.org/user-agent"
# Parâmetros para a API de proxy
params = {
"targetUrl": target_url,
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"apiKey": "YOUR_API_KEY"
}
try:
response = requests.get(proxy_api_url, params=params, timeout=15)
response.raise_for_status()
print("Response from target server via proxy API:")
print(response.json())
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
Neste cenário conceitual, o serviço de proxy trata a modificação do User-Agent internamente, com base no parâmetro userAgent fornecido à sua API.
Strings de User-Agent comuns e boas práticas
Selecionar um User-Agent adequado é essencial para uma interação eficaz com os servidores de destino.
Categorias comuns de User-Agent
| Categoria | Exemplo de string de User-Agent | Caso de uso típico |
|---|---|---|
| Chrome desktop | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 |
Simulação de navegação web comum, scraping de dados de sites otimizados para desktop. |
| Firefox desktop | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/120.0 |
Simulação de navegação web comum, scraping de dados de sites otimizados para desktop, teste de renderização específica do Firefox. |
| Safari móvel (iOS) | Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1 |
Scraping móvel, teste de versões móveis do site, simulação de tráfego de dispositivos iOS. |
| Chrome móvel (Android) | Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 |
Scraping móvel, teste de versões móveis do site, simulação de tráfego de dispositivos Android. |
| Bot genérico | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
Análise de SEO, rastreamento de conteúdo público (respeitando o robots.txt), identificação como bot de mecanismo de busca. Costuma ser bloqueado por sistemas anti-bot se não estiver especificamente na lista de permissões. |
| Mínimo/personalizado | MyCustomScraper/1.0 |
Identificação de uma aplicação personalizada quando a interação com o servidor é conhecida e permitida, ou para ferramentas internas. Em geral, não é adequado para scraping de sites públicos devido ao alto risco de bloqueio. |
Boas práticas para o gerenciamento de User-Agent
- Use User-Agents realistas: Imite navegadores e sistemas operacionais comuns. Evite User-Agents genéricos ou vazios ao fazer scraping ou testar sites públicos, pois eles costumam ser sinalizados como bots.
- Rotacione os User-Agents: Ao executar tarefas automatizadas, alternar entre um conjunto diverso de User-Agents (por exemplo, uma mistura de Chrome, Firefox e Safari em diferentes sistemas operacionais) faz o tráfego parecer mais orgânico e menos previsível.
- Mantenha os User-Agents atualizados: Use versões atuais dos navegadores. User-Agents desatualizados podem disparar avisos ou bloqueios, pois indicam um sistema antigo ou sem correções, ou um bot tentando escapar da detecção.
- Combine o User-Agent com o conteúdo-alvo: Se o alvo for a versão móvel de um site, use um User-Agent móvel. Se for a versão desktop, use um User-Agent desktop.
- Combine com rotação de IP: Para scraping ou acesso robusto, a rotação de User-Agent deve ser combinada com a rotação de endereços IP por meio de um serviço de proxy. Essa abordagem dupla reduz significativamente a probabilidade de detecção e bloqueio.
- Evite User-Agents malformados: Garanta que as strings de User-Agent sejam sintaticamente corretas e se pareçam com as legítimas. Strings malformadas podem causar erros de parsing no servidor ou sinalizar imediatamente a requisição como suspeita.
