Neste guia de configuração do agente do usuário Node.js, você verá:
- Por que é importante definir o cabeçalho
User-Agent - Como é o agente do usuário padrão no Node.js
- Como definir um agente do usuário usando a API Fetch
- Como implementar a rotação do agente do usuário no Node.js
Vamos começar!
Por que definir um agente do usuário é tão importante
O cabeçalho User-Agent é uma string que identifica o software cliente que faz uma solicitação HTTP. Ele normalmente inclui detalhes sobre o navegador ou aplicativo, o sistema operacional e a arquitetura do sistema de onde a solicitação se origina. Esse cabeçalho geralmente é definido por navegadores da web, clientes HTTP ou qualquer software que execute solicitações da web.
Por exemplo, este é o agente do usuário atual definido pelo Chrome ao solicitar páginas:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/127.0.0.0 Safari/537.36
Abaixo está uma descrição detalhada dos componentes desta string do agente do usuário:
Mozilla/5.0: originalmente usado para indicar compatibilidade com navegadores Mozilla, esse prefixo agora é adicionado para fins de compatibilidade.Windows NT 10.0; Win64; x64:Indica o sistema operacional (Windows NT 10.0), a plataforma (Win64) e a arquitetura do sistema (x64).AppleWebKit/537.36: Refere-se ao mecanismo do navegador usado pelo Chrome.- (
KHTML, como Gecko): mostra compatibilidade com os mecanismos de layout KHTML e Gecko. Chrome/127.0.0.0: Especifica o nome e a versão do navegador.Safari/537.36: Indica compatibilidade com o Safari.
Em essência, o agente do usuário pode revelar se a solicitação vem de um navegador confiável ou de outro tipo de software.
Os bots de scraping de dados e os scripts de automação costumam usar strings de agente do usuário padrão ou que não são de navegador. Isso pode expor sua natureza automatizada aos sistemas antibot, que protegem os dados da web examinando as solicitações recebidas. Ao analisar o cabeçalho User-Agent, essas soluções podem discernir se a solicitação é de um usuário genuíno ou de 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 Node.js?
A partir da versão 18, o Node.js inclui o método fetch() como uma implementação integrada da API Fetch. Essa é a maneira recomendada de realizar solicitações HTTP no Node.js, pois não requer nenhuma dependência externa. Saiba mais sobre como fazer solicitações HTTP no Node.js com a API Fetch.
Como a maioria dos outros clientes HTTP, o fetch() define automaticamente um cabeçalho User-Agent padrão ao fazer uma solicitação. Por exemplo, o mesmo acontece na biblioteca de solicitações Python.
Especificamente, o agente de usuário padrão do Node.js definido pelo fetch() é:
node
Você pode verificar isso fazendo uma solicitação GET para o endpoint httpbin.io/user-agent. Esse endpoint retorna o cabeçalho User-Agent da solicitação recebida, ajudando você a descobrir o agente de usuário definido por um cliente HTTP.
Crie um script Node.js, defina uma função assíncrona e use fetch() para fazer a solicitação HTTP desejada:
função assíncrona getFetchDefaultUserAgent() {
// faça uma solicitação HTTP para o endpoint HTTPBin
// para obter o agente do usuário
const response = await fetch("https://httpbin.io/user-agent");
// ler o agente do usuário padrão da resposta
// e imprimi-lo
const data = await response.json();
console.log(data);
}
getFetchDefaultUserAgent();
Execute o código JavaScript acima e você receberá a seguinte string:
{ 'user-agent': 'node' }
Como você pode ver, o agente do usuário definido por fetch() no Node.js é simplesmente node. Essa string é bem diferente dos agentes do usuário usados pelos navegadores, que podem acionar sistemas antibot.
As soluções anti-bot monitoram as solicitações recebidas em busca de padrões suspeitos, como strings de agente do usuário incomuns. Uma vez detectadas, elas marcam a solicitação como proveniente de um bot e a bloqueiam. É por isso que alterar o valor padrão do agente do usuário do Node.js é fundamental para evitar ser sinalizado!
Como alterar o agente do usuário do Node.js usando a API Fetch
A especificação da API Fetch não fornece um método específico para alterar o agente do usuário. Ao mesmo tempo, o User-Agent nada mais é do que um cabeçalho HTTP. Isso significa que você pode personalizar seu valor usando as opções de cabeçalhodo fetch().
Veja como definir o cabeçalho User-Agent no Node.js usando fetch()!
Defina um agente do usuário localmente
O fetch() oferece suporte à personalização do cabeçalho por meio da opção headers. Use-a para definir o cabeçalho User-Agent ao fazer uma solicitação HTTP específica, conforme mostrado a seguir:
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
},
});
Junte tudo e você obterá:
função assíncrona getFetchUserAgent() {
// faça uma solicitação HTTP para HTTPBin
// com um agente de usuário personalizado
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/127.0.0.0 Safari/537.36",
},
});
// ler o agente de usuário padrão da resposta
// e imprimi-lo
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Execute o script acima e, desta vez, o resultado será:
{
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/127.0.0.0 Safari/537.36'
}
Fantástico! O agente do usuário retornado pela API corresponde ao agente do usuário configurado no código. Agora você sabe como alterar o agente do usuário do Node.js.
Definir um agente do usuário globalmente
Definir o agente do usuário por solicitação é simples, mas pode levar a um código repetitivo. E se você quiser alterar o agente do usuário Node.js padrão globalmente? Infelizmente, no momento da redação deste artigo, a API fetch() não oferece uma maneira de substituir suas configurações padrão globalmente.
O que você pode fazer é criar uma função wrapper para personalizar o comportamento do fetch() com as configurações desejadas:
function customFetch(url, options = {}) {
// cabeçalhos personalizados
const customHeaders = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
...options.headers, // mesclar com quaisquer outros cabeçalhos passados nas opções
};
const mergedOptions = {
...options,
headers: customHeaders,
};
return fetch(url, mergedOptions);
}
Agora você pode fazer uma solicitação HTTP com um agente de usuário personalizado chamando customFetch() em vez de fetch():
const response = await customFetch("https://httpbin.io/user-agent");
O script Node.js completo será:
função customFetch(url, opções = {}) {
// adicionar um cabeçalho de agente de usuário personalizado
const cabeçalhosPersonalizados = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
...options.headers, // mesclar com quaisquer outros cabeçalhos passados nas opções
};
const mergedOptions = {
...options,
headers: customHeaders,
};
return fetch(url, mergedOptions);
}
async function getFetchUserAgent() {
// fazer uma solicitação HTTP para HTTPBin
// através do wrapper fetch personalizado
const response = await customFetch("https://httpbin.io/user-agent");
// ler o agente de usuário padrão da resposta
// e imprimi-lo
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Execute o script Node.js acima e ele imprimirá:
{
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
Ótimo! Você acabou de aprender como definir um agente de usuário global no Node.js usando fetch().
Implementar a rotação do agente do usuário no Node.js
Substituir o cabeçalho User-Agent padrão de um cliente HTTP pelo de um navegador real pode não ser suficiente para escapar da detecção anti-bot. Se você enviar muitas solicitações do mesmo endereço IP usando o mesmo agente de usuário, os sistemas anti-scraping ainda poderão identificar sua atividade como automatizada. O problema é que suas solicitações ainda estarão sugerindo um comportamento não humano.
Para reduzir o risco de detecção de bots no Node.js, você deve introduzir variabilidade em suas solicitações HTTP. Uma técnica eficaz é a rotação do agente do usuário, que envolve alterar o cabeçalho User-Agent em cada solicitação. Essa abordagem faz com que suas solicitações automatizadas pareçam vir de navegadores diferentes, tornando-as menos propensas a serem sinalizadas por sistemas anti-bot.
Na seção a seguir, você aprenderá como realizar a rotação do agente do usuário no Node.js!
Etapa 1: recuperar uma lista de agentes de usuário
Visite um site como o WhatIsMyBrowser.com e preencha uma lista com alguns valores válidos de agentes do usuário:
const userAgents = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, como Gecko) Versão/17.5 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113",
// outros agentes de usuário...
];
Dica: quanto mais strings de agentes de usuário reais esta matriz contiver, melhor será para evitar a detecção anti-bot.
Etapa 2: Escolha aleatoriamente um agente de usuário
Crie uma função que selecione aleatoriamente e retorne uma string de agente do usuário da lista:
função getRandomUserAgent() {
const userAgents = [
// agentes de usuário omitidos por brevidade...
];
// retorne um agente de usuário aleatoriamente
// extraído da lista
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
Vamos analisar o que acontece nesta função:
Math.random()gera um número aleatório entre 0 e 1- Esse número é então multiplicado pelo comprimento da matriz
userAgents. Math.floor()arredonda o número resultante para o maior inteiro menor ou igual a esse número.- O número resultante das operações anteriores corresponde a um índice gerado aleatoriamente que vai de 0 a
userAgents.length - 1. - O índice é então usado para retornar um agente de usuário aleatório da matriz de agentes de usuário.
Cada vez que você chamar a função getRandomUserAgent(), provavelmente obterá um agente de usuário diferente.
Etapa 3: faça a solicitação HTTP com um agente de usuário aleatório
Para implementar a rotação do agente do usuário no Node.js usando fetch(), defina o cabeçalho User-Agent com o valor da função getRandomUserAgent():
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent": getRandomUserAgent(),
},
});
A solicitação HTTP realizada por meio da API Fetch agora terá um agente de usuário aleatório.
Etapa 4: Junte tudo
Adicione os trechos das etapas anteriores a um script Node.js e, em seguida, envolva a lógica para fazer uma solicitação fetch() em uma função assíncrona.
Aqui está como deve ficar o seu script final de rotação de agente de usuário Node.js:
function getRandomUserAgent() {
const userAgents = [
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, como Gecko) Versão/17.5 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113",
// outros agentes de usuário...
];
// retorne um agente de usuário aleatoriamente
// extraído da lista
return userAgents[Math.floor(Math.random() * userAgents.length)];
}
async function getFetchUserAgent() {
// faça uma solicitação HTTP com um agente de usuário aleatório
const response = await fetch("https://httpbin.io/user-agent", {
headers: {
"User-Agent": getRandomUserAgent(),
},
});
// ler o agente de usuário padrão da resposta
// e imprimi-lo
const data = await response.json();
console.log(data);
}
getFetchUserAgent();
Execute o script 3 ou 4 vezes. Estatisticamente, você deverá ver respostas diferentes do agente do usuário, conforme abaixo:

Isso demonstra que a rotação do agente do usuário está funcionando de maneira eficaz.
Et voilà! Agora você é especialista em definir agentes de usuário no Node.js usando a API Fetch.
Conclusão
Neste tutorial, você viu por que deve definir o cabeçalho User-Agent e como é o agente de usuário padrão do Node.js no fetch(). Você também explorou como substituir esse valor e implementar a rotação do agente de usuário no Node.js para evitar sistemas básicos anti-scraping. No entanto, sistemas mais avançados ainda podem detectar e bloquear suas solicitações automatizadas. Para evitar banimentos de IP, você pode configurar um Proxy no Node.js, mas mesmo isso pode não ser sempre suficiente!
Para uma solução mais robusta, considere a API Web Scraper— um serviço de Scraping de dados de última geração que simplifica as solicitações automatizadas da web no Node.js ou em qualquer outra tecnologia. Ele contorna com eficácia as medidas anti-scraping por meio de recursos como rotação de IP e agente do usuário, tornando o Scraping de dados mais fácil do que nunca.
Inscreva-se agora e encontre o melhor produto para seus projetos. Comece seu Teste grátis hoje mesmo!