Node.js User Agent Guide: Einrichten und Ändern

Entdecken Sie, wie wichtig es ist, User-Agent-Header festzulegen, den Standard-User-Agent in Node.js und wie Sie User-Agent-Rotation implementieren können, um Anti-Bot-Erkennung zu umgehen.
10 min lesen
Node.js User Agent Guide hero image

In dieser Anleitung zur Node.js-User-Agent-Einstellung erfahren Sie:

  • Warum es wichtig ist, den User-Agent-Header festzulegen
  • Wie der Standard-User-Agent in Node.js aussieht
  • Wie Sie einen User-Agent mit der Fetch-API einstellen
  • Wie Sie die User-Agent-Rotation in Node.js implementieren

Lassen Sie uns loslegen!

Warum das Setzen eines User-Agents so wichtig ist

Der User-Agent-Header ist eine Zeichenfolge, die die Client-Software identifiziert, die eine HTTP-Anfrage stellt. Er enthält in der Regel Details zum Browser oder zur Anwendung, zum Betriebssystem und zur Systemarchitektur, von der die Anfrage stammt. Dieser Header wird normalerweise von Webbrowsern, HTTP-Clients oder jeder Software, die Webanfragen ausführt, gesetzt.

Dies ist beispielsweise der aktuelle User-Agent, der von Chrome beim Abrufen von Seiten festgelegt wird:

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

Nachfolgend finden Sie eine Aufschlüsselung der Komponenten in dieser User-Agent-Zeichenfolge:

  • Mozilla/5.0: Ursprünglich wurde dieses Präfix verwendet, um die Kompatibilität mit Mozilla-Browsern anzuzeigen, heute wird es aus Kompatibilitätsgründen hinzugefügt.
  • Windows NT 10.0; Win64; x64: Gibt das Betriebssystem (Windows NT 10.0), die Plattform (Win64) und die Systemarchitektur (x64) an.
  • AppleWebKit/537.36: Bezieht sich auf die Browser-Engine, die Chrome verwendet.
  • (KHTML, like Gecko): Zeigt die Kompatibilität mit den Layout-Engines KHTML und Gecko an.
  • Chrome/127.0.0.0: Gibt den Namen und die Version des Browsers an.
  • Safari/537.36: Gibt die Kompatibilität mit Safari an.

Im Wesentlichen kann der User Agent offenlegen, ob die Anfrage von einem vertrauenswürdigen Browser oder einer anderen Art von Software stammt.

Web-Scraping-Bots und Automatisierungsskripte verwenden häufig Standard- oder Nicht-Browser-User-Agent-Strings. Diese können ihre automatisierte Natur gegenüber Anti-Bot-Systemen offenlegen, die Webdaten durch Überprüfung eingehender Anfragen schützen. Durch die Analyse des User-Agent-Headers können diese Lösungen erkennen, ob die Anfrage von einem echten Benutzer oder einem Bot stammt.

Weitere Informationen finden Sie in unserem Leitfaden zu User Agents für Web-Scraping.

Was ist der Standard-User-Agent von Node.js?

Ab Version 18 enthält Node.js die Methode fetch() als integrierte Implementierung der Fetch-API. Dies ist die empfohlene Methode zum Ausführen von HTTP-Anfragen in Node.js, da sie keine externen Abhängigkeiten erfordert. Erfahren Sie mehr darüber, wie Sie HTTP-Anfragen in Node.js mit der Fetch-API erstellen.

Wie die meisten anderen HTTP-Clients setzt fetch() bei der Erstellung einer Anfrage automatisch einen Standard-User-Agent-Header. Dasselbe geschieht beispielsweise in der Python-Requests-Bibliothek.

Insbesondere lautet der von fetch() festgelegte Standard-User-Agent für Node.js:

node

Sie können dies überprüfen, indem Sie eine GET-Anfrage an den Endpunkt httpbin.io/user-agent senden. Dieser Endpunkt gibt den User-Agent- Header der eingehenden Anfrage zurück und hilft Ihnen so, den von einem HTTP-Client festgelegten User-Agent zu ermitteln.

Erstellen Sie ein Node.js-Skript, definieren Sie eine asynchrone Funktion und verwenden Sie fetch(), um die gewünschte HTTP-Anfrage zu stellen:

async function getFetchDefaultUserAgent() {

// eine HTTP-Anfrage an den HTTPBin-Endpunkt senden

// um den User-Agent abzurufen

const response = await fetch("https://httpbin.io/user-agent");

// Lesen Sie den Standard-User-Agent aus der Antwort aus

// und geben Sie ihn aus

const data = await response.json();

console.log(data);

}

getFetchDefaultUserAgent();

Führen Sie den obigen JavaScript-Code aus, und Sie erhalten die folgende Zeichenfolge:

{ 'user-agent': 'node' }

Wie Sie sehen können, ist der von fetch() in Node.js festgelegte User-Agent einfach node. Diese Zeichenfolge unterscheidet sich erheblich von den von Browsern verwendeten User-Agents, die Anti-Bot-Systeme auslösen können.

Anti-Bot-Lösungen überwachen eingehende Anfragen auf verdächtige Muster, wie z. B. ungewöhnliche User-Agent-Zeichenfolgen. Sobald sie erkannt werden, markieren sie die Anfrage als von einem Bot stammend und blockieren sie. Aus diesem Grund ist es wichtig, den Standardwert des Node.js-User-Agents zu ändern, um nicht markiert zu werden!

So ändern Sie den Node.js-User-Agent mithilfe der Fetch-API

Die Fetch-API-Spezifikation bietet keine spezifische Methode zum Ändern des User-Agents. Gleichzeitig ist User-Agent nichts anderes als ein HTTP-Header. Das bedeutet, dass Sie seinen Wert mit den fetch() -Header-Optionen anpassen können.

Erfahren Sie, wie Sie den User-Agent-Header in Node.js mit fetch() festlegen können!

Benutzeragenten lokal festlegen

fetch() unterstützt die Anpassung von Headern über die Option „headers ”. Verwenden Sie diese Option, um den User-Agent -Header bei einer bestimmten HTTP-Anfrage wie folgt festzulegen:

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

},

});

Wenn Sie alles zusammenfügen, erhalten Sie:

async function getFetchUserAgent() {

// HTTP-Anfrage an HTTPBin senden

// mit einem benutzerdefinierten User-Agent

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

},

});

// Den Standard-User-Agent aus der Antwort lesen

// und ausgeben

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Starten Sie das obige Skript, und dieses Mal lautet das Ergebnis:

{

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

}

Fantastisch! Der von der API zurückgegebene User Agent stimmt mit dem im Code konfigurierten User Agent überein. Jetzt wissen Sie, wie Sie den Node.js-User Agent ändern können.

Benutzeragenten global festlegen

Das Festlegen des User-Agents für jede einzelne Anfrage ist unkompliziert, kann jedoch zu sich wiederholendem Boilerplate-Code führen. Was ist, wenn Sie den Standard-Node.js-User-Agent global ändern möchten? Leider bietet die fetch() -API zum Zeitpunkt der Erstellung dieses Artikels keine Möglichkeit, ihre Standardeinstellungen global zu überschreiben.

Sie können jedoch eine Wrapper-Funktion erstellen, um das Verhalten von fetch() mit Ihren gewünschten Konfigurationen anzupassen:

function customFetch(url, options = {}) {

// benutzerdefinierte Header

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, // mit allen anderen in den Optionen übergebenen Headern zusammenführen

};

const mergedOptions = {

...options,

headers: customHeaders,

};

return fetch(url, mergedOptions);

}

Sie können nun eine HTTP-Anfrage mit einem benutzerdefinierten User-Agent stellen, indem Sie customFetch() anstelle von fetch() aufrufen:

const response = await customFetch("https://httpbin.io/user-agent");

Das vollständige Node.js-Skript lautet:

function customFetch(url, options = {}) {

// einen benutzerdefinierten User-Agent-Header hinzufügen

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, // mit allen anderen in den Optionen übergebenen Headern zusammenführen

};

const mergedOptions = {

...options,

headers: customHeaders,

};

return fetch(url, mergedOptions);

}

async function getFetchUserAgent() {

// HTTP-Anfrage an HTTPBin senden

// über den benutzerdefinierten Fetch-Wrapper

const response = await customFetch("https://httpbin.io/user-agent");

// Standard-User-Agent aus der Antwort lesen

// und ausgeben

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Starten Sie das oben stehende Node.js-Skript, und es wird Folgendes ausgegeben:

{

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

}

Großartig! Sie haben gerade gelernt, wie Sie mit fetch() einen globalen User-Agent in Node.js festlegen können.

Implementieren Sie User-Agent-Rotation in Node.js

Das Überschreiben des Standard-User-Agent-Headers eines HTTP-Clients mit dem eines echten Browsers reicht möglicherweise nicht aus, um die Anti-Bot-Erkennung zu umgehen. Wenn Sie zu viele Anfragen von derselben IP-Adresse mit demselben User-Agent senden, können Anti-Scraping-Systeme Ihre Aktivitäten dennoch als automatisiert identifizieren. Das Problem ist, dass Ihre Anfragen weiterhin auf nicht-menschliches Verhalten hindeuten.

Um das Risiko einer Bot-Erkennung in Node.js zu verringern, sollten Sie Ihre HTTP-Anfragen variieren. Eine effektive Technik ist die User-Agent-Rotation, bei der der User-Agent-Header bei jeder Anfrage geändert wird. Durch diesen Ansatz scheinen Ihre automatisierten Anfragen von verschiedenen Browsern zu stammen, wodurch sie weniger wahrscheinlich von Anti-Bot-Systemen markiert werden.

Im folgenden Abschnitt erfahren Sie, wie Sie die User-Agent-Rotation in Node.js erreichen können!

Schritt 1: Liste der User Agents abrufen

Besuchen Sie eine Website wie WhatIsMyBrowser.com und erstellen Sie eine Liste mit einigen gültigen User-Agent-Werten:

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, wie Gecko) Version/17.5 Safari/605.1.15”,

„Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113”,

// andere User Agents...

];

Tipp: Je mehr reale User-Agent-Strings dieses Array enthält, desto besser lässt sich eine Anti-Bot-Erkennung vermeiden.

Schritt 2: Zufällige Auswahl eines User Agents

Erstellen Sie eine Funktion, die zufällig einen User-Agent-String aus der Liste auswählt und zurückgibt:

function getRandomUserAgent() {

const userAgents = [

// User Agents der Kürze halber weggelassen...

];

// einen User Agent zufällig zurückgeben,

// der aus der Liste extrahiert wurde

return userAgents[Math.floor(Math.random() * userAgents.length)];

}

Schauen wir uns einmal genauer an, was in dieser Funktion passiert:

  • Math.random() generiert eine Zufallszahl zwischen 0 und 1
  • Diese Zahl wird dann mit der Länge des Arrays userAgents multipliziert.
  • Math.floor() rundet die resultierende Zahl auf die größte ganze Zahl ab, die kleiner oder gleich dieser Zahl ist.
  • Die aus den vorherigen Operationen resultierende Zahl entspricht einem zufällig generierten Index, der von 0 bis userAgents.length - 1 reicht.
  • Der Index wird dann verwendet, um einen zufälligen User-Agent aus dem Array der User-Agents zurückzugeben.

Jedes Mal, wenn Sie die Funktion getRandomUserAgent() aufrufen, erhalten Sie wahrscheinlich einen anderen User Agent.

Schritt 3: Erstellen Sie die HTTP-Anfrage mit einem zufälligen User-Agent

Um die User-Agent-Rotation in Node.js mit fetch() zu implementieren, setzen Sie den User-Agent -Header mit dem Wert aus der Funktion getRandomUserAgent():

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent": getRandomUserAgent(),

},

});

Die über die Fetch-API ausgeführte HTTP-Anfrage verfügt nun über einen zufälligen User-Agent.

Schritt 4: Alles zusammenfügen

Fügen Sie die Snippets der vorherigen Schritte zu einem Node.js-Skript hinzu und verpacken Sie dann die Logik für die Erstellung einer fetch() -Anfrage in eine asynchrone Funktion.

So sollte Ihr endgültiges Node.js-Skript zur Rotation von User-Agents aussehen:

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, wie Gecko) Version/17.5 Safari/605.1.15”,

„Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/126.0.2592.113”,

// andere User Agents...

];

// einen zufälligen User-Agent zurückgeben,

// der aus der Liste extrahiert wurde

return userAgents[Math.floor(Math.random() * userAgents.length)];

}

async function getFetchUserAgent() {

// eine HTTP-Anfrage mit einem zufälligen User-Agent erstellen

const response = await fetch("https://httpbin.io/user-agent", {

headers: {

"User-Agent": getRandomUserAgent(),

},

});

// den Standard-User-Agent aus der Antwort lesen

// und ausgeben

const data = await response.json();

console.log(data);

}

getFetchUserAgent();

Führen Sie das Skript drei- oder viermal aus. Statistisch gesehen sollten Sie verschiedene User-Agent-Antworten wie unten sehen:

different user agent responses

Dies zeigt, dass die User-Agent-Rotation effektiv funktioniert.

Et voilà! Sie sind nun in der Lage, User Agents in Node.js mithilfe der Fetch-API festzulegen.

Fazit

In diesem Tutorial haben Sie gesehen, warum Sie den User-Agent-Header festlegen sollten und wie der Standard-Node.js-User-Agent in fetch() aussieht. Sie haben auch erfahren, wie Sie diesen Wert überschreiben und die User-Agent-Rotation in Node.js implementieren können, um grundlegende Anti-Scraping-Systeme zu umgehen. Fortgeschrittenere Systeme können Ihre automatisierten Anfragen jedoch weiterhin erkennen und blockieren. Um IP-Sperren zu vermeiden, können Sie in Node.js einen Proxy konfigurieren, aber selbst das reicht möglicherweise nicht immer aus!

Für eine robustere Lösung sollten Sie die Web Scraper APIin Betracht ziehen – einen Scraping-Dienst der nächsten Generation, der automatisierte Webanfragen in Node.js oder jeder anderen Technologie vereinfacht. Er umgeht Anti-Scraping-Maßnahmen effektiv durch Funktionen wie IP- und User-Agent-Rotation und macht Web-Scraping einfacher denn je.

Melden Sie sich jetzt an und finden Sie das beste Produkt für Ihre Projekte. Starten Sie noch heute die Gratis-Testversion!