In diesem Leitfaden erfahren Sie:
- Was der User-Agent-Header ist und warum er so wichtig ist
- Was der Standard-cURL-User-Agent-Header ist
- Zwei Ansätze zum Festlegen von cURL-User-Agent-Strings
- Wie Sie die User-Agent-Rotationslogik in cURL implementieren
Lassen Sie uns loslegen!
Was ist ein User-Agent und warum ist er wichtig?
Ein User Agent ist eine Zeichenfolge, die Browser, Anwendungen, die Webanfragen stellen, und HTTP-Clients im User-Agent-HTTP-Header festlegen, um die Client-Software zu identifizieren, von der die Anfrage stammt. Diese Zeichenfolge enthält in der Regel Informationen wie den Browser-/Anwendungstyp, das Betriebssystem und andere Details.
Hier ist beispielsweise eine reale User-Agent-Zeichenfolge aus einer Chrome-Anfrage:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Die Informationen in diesem Header sind entscheidend, um festzustellen, ob Anfragen von einem bekannten Browser oder einer anderen Software stammen. Scraping-Bots verwenden in der Regel inkonsistente oder standardmäßige User-Agent-Strings, wodurch ihre automatisierte Natur offengelegt wird. Somit hilft der User-Agent-Header Anti-Bot-Lösungen dabei, zu erkennen, ob es sich bei dem aktuellen Benutzer um einen echten Benutzer oder einen Bot handelt.
Weitere Informationen finden Sie in unserem Leitfaden zu User Agents für Web-Scraping.
Was ist der Standard-cURL-User-Agent?
Wie die meisten HTTP-Clients setzt cURL den User-Agent-Header, wenn eine HTTP-Anfrage gestellt wird. Im Detail lautet die cURL-User-Agent-Zeichenfolge:
curl/X.Y.Z
Dabei ist X.Y.Z die Version von cURL, die auf Ihrem Rechner installiert ist.
Um dies zu überprüfen, senden Sie eine cURL-Anfrage an den Endpunkt /user-agent des Projekts httpbin.io. Diese API gibt die vom Aufrufer festgelegte User-Agent-Header-Zeichenfolge zurück.
Senden Sie eine GET-Anfrage an /user-agent mit cURL unter Verwendung der folgenden Anweisung:
curl "https://httpbin.io/user-agent"
Hinweis: Unter Windows ersetzen Sie curl durch curl.exe. Der Grund dafür ist, dass curl ein Alias für Invoke-WebRequest in PowerShell ist, während curl.exe auf die ausführbare Datei von cURL Windows verweist.
Der Endpunkt sollte etwa Folgendes zurückgeben:
{
"user-agent": "curl/8.4.0"
}
Wie Sie sehen können, ist der von cURL festgelegte User-Agent curl/8.4.0. Das ist nicht gut, da dadurch die Anfrage eindeutig als von cURL stammend identifiziert wird. Anti-Bot-Lösungen, die von Websites zum Schutz ihrer Seiten und Daten eingesetzt werden, könnten diese Anfrage leicht als nicht von einem echten Benutzer stammend markieren und entsprechend blockieren.
Aus diesem Grund müssen Sie wissen, wie Sie cURL-User-Agent-Header-Strings festlegen.
So legen Sie den cURL-User-Agent-Header fest
Es gibt zwei Ansätze zum Festlegen eines User-Agents in cURL. Sehen wir uns beide an!
Einen benutzerdefinierten User-Agent direkt festlegen
Das Festlegen von User Agents ist so beliebt, dass cURL genau dafür eine Option bietet. Insbesondere mit der Option -A oder –user-agent können Sie die Zeichenfolge angeben, die im User-Agent-Header der von cURL erstellten HTTP-Anfrage festgelegt werden soll.
Dies ist die Syntax zum Festlegen eines cURL-User-Agent-Headers mit dieser Option:
curl -A|--user-agent "<user-agent_string>" "<url>"
Betrachten Sie das folgende Beispiel:
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"
Die Ausgabe lautet:
{
"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"
}
Großartig! Der vom Endpunkt httpbin.io /user-agent erkannte User-Agent entspricht dem in der Anfrage festgelegten.
Beachten Sie, dass die obige Anfrage gleichbedeutend ist mit:
curl --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”
Es wird zwar nicht empfohlen, den User-Agent-Header vollständig zu deaktivieren, aber Sie können eine leere Zeichenfolge an -A übergeben. Überprüfen Sie dies, indem Sie den Endpunkt /headers von httpbin.io aufrufen, der die Header der eingehenden Anfrage zurückgibt:
curl -A "" "https://httpbin.io/headers"
Das Ergebnis lautet:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
]
}
}
Wie erwartet, kein User-Agent-Header.
Wenn Sie stattdessen den User-Agent-Header beibehalten, ihm aber einen leeren Wert zuweisen möchten, übergeben Sie eine einzelne Leerzeichen-Zeichenkette an -A:
curl -A " " "https://httpbin.io/headers"
Diesmal gibt der Endpunkt Folgendes zurück:
{
"headers": {
"Accept": [
"*/*"
],
"Host": [
"httpbin.io"
],
"User-Agent": [
""
]
}
}
Beachten Sie den leeren String-Wert für „User-Agent“.
Benutzerdefinierten User-Agent-Header festlegen
Schließlich ist User-Agent nichts anderes als ein HTTP-Header. Das bedeutet, dass Sie ihn wie jeden anderen HTTP-Header in cURL mit der Option -H oder –header festlegen können:
curl -H|--header "User-Agent: <user-agent_string>" "<url>"
Eine vollständige Anleitung finden Sie in unserem Leitfaden zum Senden von HTTP-Headern mit cURL.
Sehen Sie sich die Option -H in der folgenden Beispielanwendung an:
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"
Beachten Sie, dass HTTP-Header so konzipiert sind, dass sie nicht zwischen Groß- und Kleinschreibung unterscheiden, sodass User-Agent gleichbedeutend mit user-agent ist.
Das Ergebnis lautet:
{
"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"
}
Großartig! Der User-Agent-Wert wurde wie gewünscht festgelegt.
Der obige cURL-Befehl entspricht:
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"
Für spezielle Anwendungsfälle sollten Sie die folgenden beiden cURL-User-Agent-Header-Zeichenfolgen in Betracht ziehen:
- „User-Agent:“, um den User-Agent-Header aus der Anfrage zu entfernen.
- „User-Agent: “, um den User-Agent-Header auf eine leere Zeichenfolge zu setzen.
Implementieren Sie User-Agent-Rotation in cURL
Bei der Erstellung automatischer Anfragen in großem Umfang mit cURL reicht es möglicherweise nicht aus, einen festen Wert für User-Agent festzulegen. Das Problem besteht darin, dass Anti-Bot-Technologien alle eingehenden Anfragen überwachen. Wenn sie zu viele Anfragen mit denselben Headern und von derselben IP-Adresse sehen, werden sie wahrscheinlich Maßnahmen ergreifen.
Der Schlüssel, um bei automatisierten Anfragen eine Erkennung und Blockierung durch Websites zu vermeiden, liegt darin, diese zu randomisieren. In dieser Hinsicht hilft die Rotation von User-Agents dabei, Anfragen von verschiedenen Browsern zu simulieren. Dies verringert das Risiko, vorübergehende Sperren oder Blockierungen auszulösen.
Die Rotation von cURL-User-Agents lässt sich mit den folgenden drei Schritten erreichen:
- Sammeln Sie User Agents: Stellen Sie eine Liste mit realen User-Agent-Strings aus verschiedenen Browsern, unterschiedlichen Versionen und auf verschiedenen Geräten zusammen.
- Implementieren Sie eine Rotationslogik: Wählen Sie einen zufälligen User-Agent aus der Liste aus.
- Anfragen randomisieren: Legen Sie die ausgewählte User-Agent-Zeichenfolge in der cURL-Anfrage fest.
Die Implementierung dieses Verfahrens erfordert nur wenige Zeilen Code, sodass es sich von Unix-basierten Systemen zu Windows unterscheidet. Erfahren Sie, wie Sie die User-Agent-Rotation in cURL in beiden Umgebungen implementieren können!
Bash
Sammeln Sie eine Liste gültiger User Agents von einer Website wie User Agent String.com und speichern Sie sie in einer Array-Variablen:
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”
)
Implementieren Sie dann eine Funktion, die es mithilfe von RANDOM zufällig aus der Liste extrahiert:
get_random_user_agent() {
# Anzahl der User Agents in der Liste
local count=${#user_agents[@]}
# Erzeuge eine Zufallszahl zwischen 0 und count
local index=$((RANDOM % count))
# die zufällig ausgewählte User-Agent-Zeichenfolge zurückgeben
echo "${user_agents[$index]}"
}
Rufen Sie die Funktion auf, erhalten Sie einen rotierenden User Agent und legen Sie ihn in cURL fest:
# Zufälligen User-Agent abrufen
user_agent=$(get_random_user_agent)
# cURL-Anfrage an die angegebene URL senden
# unter Verwendung des zufälligen User-Agents
curl -A "$user_agent" "https://httpbin.io/user-agent"
Hinweis: Ändern Sie die Ziel-URL entsprechend Ihren Zielen.
Fügen Sie alles zusammen, und Sie erhalten die folgende Bash-Datei:
#!/bin/bash
# Liste der User-Agent-Strings
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() {
# Anzahl der User Agents in der Liste
local count=${#user_agents[@]}
# Generieren einer Zufallszahl zwischen 0 und count
local index=$((RANDOM % count))
# Zurückgeben der zufällig ausgewählten User-Agent-Zeichenfolge
echo "${user_agents[$index]}"
}
# Zufälligen User-Agent abrufen
user_agent=$(get_random_user_agent)
# cURL-Anfrage an die angegebene URL senden
# unter Verwendung des zufälligen User-Agents
curl -A "$user_agent" "https://httpbin.io/user-agent"
Starten Sie das obige Skript, und jedes Mal wird ein anderer User Agent angezeigt. Mission erfüllt!
PowerShell
Rufen Sie eine Liste realer User Agents von einer Website wie WhatIsMyBrowser.com ab. Speichern Sie diese Daten anschließend in einer Array-Variablen:
$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”
)
Erstellen Sie dann eine Funktion, die zufällig eine User-Agent-Zeichenfolge aus der Liste auswählt und zurückgibt:
function Get-RandomUserAgent {
# Anzahl der User Agents in der Liste
$count = $user_agents.Count
# Generieren einer Zufallszahl zwischen 0 und $count
$index = Get-Random -Maximum $count
# Zurückgeben des zufällig ausgewählten User Agents
return $user_agents[$index]
}
Rufen Sie schließlich die Funktion auf, rufen Sie den zufälligen User-Agent ab und verwenden Sie ihn in cURL:
# Zufälligen User-Agent abrufen
$user_agent = Get-RandomUserAgent
# HTTP-Anfrage an die angegebene URL senden
# unter Verwendung des zufälligen User-Agents
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Wenn Sie alles zusammenfügen, erhalten Sie den folgenden Code:
# Liste der User Agents
$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")
function Get-RandomUserAgent {
# Anzahl der User Agents in der Liste
$count = $user_agents.Count
# Zufallszahl zwischen 0 und $count generieren
$index = Get-Random -Maximum $count
# den zufällig ausgewählten User-Agent zurückgeben
return $user_agents[$index]
}
# einen zufälligen User-Agent abrufen
$user_agent = Get-RandomUserAgent
# eine HTTP-Anfrage an die angegebene URL senden
# unter Verwendung des zufälligen User-Agents
curl.exe -A "$user_agent" "https://httpbin.io/user-agent"
Speichern Sie dies in einem .ps1-Skript und führen Sie es einige Male aus. Jedes Mal erhalten Sie eine andere User-Agent-Zeichenfolge.
Et voilà! Jetzt sind Sie ein Meister im Einrichten von cURL-User-Agent-Header-Strings.
Fazit
In diesem Leitfaden haben Sie erfahren, warum das Festlegen des User-Agent-Headers in einem HTTP-Client so wichtig ist und wie Sie dies in cURL tun können. Auf diese Weise können Sie einige Anti-Bot-Systeme täuschen, sodass diese glauben, Ihre Anfragen kämen von einem relationalen Browser. Gleichzeitig können fortschrittliche Anti-Bot-Lösungen Ihre Anfragen weiterhin blockieren. Um Maßnahmen wie Ratenbegrenzungen zu umgehen, könnten Sie einen Proxy in cURL integrieren. Das reicht jedoch möglicherweise nicht aus!
Vermeiden Sie all diesen Stress und probieren Sie die Scraper API aus. Als umfassende All-in-One-Scraping-API der nächsten Generation bietet sie alles, was Sie für automatisierte Webanfragen mit cURL oder einem anderen HTTP-Client benötigen. Diese voll ausgestattete Lösung verfügt über IP- und User-Agent-Rotation und kann jede Anti-Bot-Technologie umgehen. Automatisierte HTTP-Anfragen waren noch nie so einfach!
Registrieren Sie sich jetzt für eine kostenlose Testversion der Web-Scraping-Infrastruktur von Bright Data oder sprechen Sie mit einem unserer Datenexperten über unsere Scraping-Lösungen.