Das Hypertext Transfer Protocol (HTTP) ist ein zustandsloses Protokoll, das dem Client-Server-Modell folgt, bei dem ein Client eine Anfrage stellt und dann auf eine Antwort vom Server wartet. Die Anfrage enthält Details wie die HTTP-Methode, den Serverstandort, den Pfad, die Abfragezeichenfolge und die Header.
HTTP-Header sind Felder oder Listen von Zeichenfolgen als Schlüssel-Wert-Paare, die die Übertragung von Metadaten und Anweisungen erleichtern. Sie sind maßgeblich an der Definition von Parametern wie Inhaltstyp, Caching-Verhalten und Authentifizierung beteiligt und gewährleisten eine effiziente und sichere Interaktion zwischen Clients und Servern. Beim Web-Scraping ermöglichen HTTP-Header die Anpassung von Anfragen, sodass Web-Scraper User Agents imitieren, die Inhaltsaushandlung steuern und die Authentifizierung gemäß den Richtlinien und Protokollen der Website durchführen können.
Zu den gängigen Anwendungsfällen von HTTP-Headern beim Web-Scraping gehören das Ändern des User-Agents (UA) oder des Antworttyps, das Ausführen bedingter Anfragen und die Authentifizierung bei Anwendungsprogrammierschnittstellen (APIs).
In diesem Artikel erfahren Sie, wie Sie HTTP-Header mitcurl senden können.
Senden von HTTP-Headern mit cURL
Bevor Sie mit diesem Tutorial beginnen, überprüfen Sie, ob curl auf Ihrem Betriebssystem installiert ist, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:
curl --version
Wenn es installiert ist, wird in der Ausgabe eine Versionsnummer angezeigt, wie zum Beispiel:
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL
Wenn Sie eine Fehlermeldung erhalten, z. B.„curl wird nicht als interner oder externer Befehl, als ausführbares Programm oder als Batch-Datei erkannt“ oder„Befehl nicht gefunden“, müssen Siecurl installieren.
Außerdem benötigen Sie ein Tool zum Überprüfen von Headern, z. B.httpbin.org, einen einfachen HTTP-Anfrage- und Antwortdienst.
Wenn Sie bereits mit curl gearbeitet haben, wissen Sie, dass die curl-Syntax wie folgt aussieht:
curl [Optionen] [URL]
Das bedeutet, wenn Sie eine Webseite von mywebpage.com herunterladen möchten, müssen Sie den folgenden Befehl ausführen:
curl www.mywebpage.com
cURL-Header
Um die von curl gesendeten Header mit httpbin.org anzuzeigen, öffnen Sie Ihre Befehlszeile und führen Sie Folgendes aus:
curl http://httpbin.org/headers
Die Ausgabe sollte eine Liste der Header enthalten:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd2eb0-0617353714d52f3777c9c267"
}
Die Header „Accept“, „Host“ und „User-Agent“ werden standardmäßig mit curl gesendet.
Der Accept-Header teilt dem Server mit, welche Medientypen der Client akzeptieren kann. Er teilt dem Server die Inhaltstypen mit, die der Client akzeptieren möchte, und ermöglicht so die Inhaltsaushandlung zwischen Client und Server.
Ein Accept -Header, der angibt, dass der Client JSON bevorzugt, sieht wie folgt aus:
Accept: application/json
Das Feld „User-Agent“ enthält Ihre Client-Details, in diesem Fall die curl-Anwendung mit der Version 7.55.1 (diese Versionsnummer entspricht Ihrer Version).
Der Host-Header identifiziert eindeutig die Webdomain (d. h. den Host) und den Port, an den die HTTP-Anfrage gesendet wird. Wenn in der Anfrage kein Port angegeben ist, werden die Standardwerte angenommen (d. h. Port 80 für HTTP und Port 443 für HTTPS).
X-Amzn-Trace-Id ist der einzige Header in der Ausgabe, der kein Standardheader ist. Dieser Header zeigt an, dass Ihre Anfrage an einen Amazon Web Services (AWS)-Dienst, z. B. einen AWS-Load Balancer, gesendet wurde, und kann zur Verfolgung von HTTP-Anfragen verwendet werden.
Um zu überprüfen, ob diese Header standardmäßig von curl gesendet wurden, können Sie den Verbose-Modus verwenden. Das Flag hierfür lautet entweder -v oder --verbose und zeigt detaillierte Informationen zur Anfrage und Antwort an, einschließlich der Header.
Führen Sie den folgenden Befehl aus, um die von curl gesendeten Standard-Header anzuzeigen:
curl -v http://httpbin.org/headers
Ihre Ausgabe sollte wie folgt aussehen:
* Trying 50.16.63.240...
* TCP_NODELAY set
* Connected to httpbin.org (50.16.63.240) port 80 (#0)
> GET /headers HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 22 Mar 2024 07:18:00 GMT
< Content-Type: application/json
< Content-Length: 173
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd30a8-624365ad52781957578cd5b1"
}
}
* Verbindung #0 zum Host httpbin.org bleibt intakt
Die Zeilen mit einem Größer-als-Zeichen (>) zeigen, was Ihr Client (curl) an den Endpunkt gesendet hat. Diese Ausgabe bestätigt, dass die folgenden Header gesendet wurden:
GET(HTTP-Methode) an den Endpunkt/HeaderHostmit dem Werthttpbin.orgUser-Agentmit dem Wertcurl/7.55.1Acceptmit dem Wert*/*
In der Ausgabe spiegeln die Zeilen mit einem Kleiner-Zeichen, wie z. B. < Content-Type: application/json, die von Ihnen gesendeten Header wider.
Ändern der Standard-Header mit dem Flag -H
Das Flag -H oder --header wird verwendet, um benutzerdefinierte Header an den Server zu übergeben, und kann auch zum Testen verwendet werden.
Um beispielsweise den User-Agent von curl/7.55.1 in Your-New-User-Agent zu ändern, verwenden Sie den folgenden Befehl:
curl -H "User-Agent: Your-New-User-Agent" http://httpbin.org/headers
Ihre Ausgabe sieht wie folgt aus:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "Your-New-User-Agent",
"X-Amzn-Trace-Id": "Root=1-65fd5123-3ebe566a4681427c6996c72c"
}
}
Wenn Sie den Accept-Header von */*, der alle Arten von Inhalten akzeptiert, in application/json ändern möchten, der nur Inhalte im JSON-Format akzeptiert, verwenden Sie den folgenden Befehl:
curl --header "Accept: application/json" http://httpbin.org/headers
Ihre Ausgabe sieht wie folgt aus:
{
"headers": {
"Accept": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd55c3-05c21f81770c1c5e6343b1fc"
}
}
Hinweis: Im zweiten Beispiel wurde
--headeranstelle von-Hverwendet.--headerund-Hsind austauschbar und haben dieselbe Funktion.
Seit Curl Version 7.55.0 können Sie auch eine Datei mit Ihren Headern übergeben. Wenn die Datei mit Ihren Headern beispielsweise den Namen header_file hat, können Sie den folgenden Befehl verwenden, um eine Datei mit Ihren Headern zu übergeben:
Curl -H @header_file
Benutzerdefinierte Header senden
Benutzerdefinierte Header werden von Entwicklern definiert und enthalten zusätzliche Informationen zu HTTP-Anfragen, die über die von Standard-Headern bereitgestellten Informationen hinausgehen.
Um einen benutzerdefinierten Header mit curl zu senden, können Sie das Flag -H verwenden. Wenn Sie beispielsweise einen benutzerdefinierten Header namens My-Custom-Header mit dem Wert value senden möchten, führen Sie den folgenden Befehl aus:
curl -H "My-Custom-Header: Value of custom header" http://httpbin.org/headers
Ihre Ausgabe sieht wie folgt aus:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "Value of custom header",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd7d2a-3b683be160ff2965023b3a31"
}
}
Leere Header senden
Es gibt Szenarien, in denen das Senden leerer Header erforderlich ist, z. B. zur Einhaltung bestimmter API-Anforderungen, die bestimmte Header vorschreiben, auch wenn diese keinen Inhalt haben. DerHTTP Strict Transport Security (HSTS)-Headerwird beispielsweise verwendet, um sichere HTTPS-Verbindungen auf Websites zu erzwingen. Während dieser Header normalerweise Anweisungen zur Dauer und zum Verhalten von HSTS enthält, gewährleistet das Senden mit einem leeren Wert die sofortige Durchsetzung von HSTS.
Sie können leere Header auch zum Löschen oder Zurücksetzen von Headern verwenden. Wenn Sie beispielsweise einen zuvor standardmäßig festgelegten Header zurücksetzen oder löschen möchten, können Sie durch das Senden eines leeren Headers den Wert des Headers löschen.
Um einen leeren Header mit curl zu senden, müssen Sie den Headernamen gefolgt von einem Semikolon angeben, um einen leeren Wert anzugeben. Der folgende Befehl zeigt Ihnen, wie Sie einen leeren benutzerdefinierten Header namens „My-Custom-Header” senden können:
curl -H "My-Custom-Header;" http://httpbin.org/headers
Die Ausgabe zeigt „My-Custom-Header” mit einem leeren Wert:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"My-Custom-Header": "",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd84e2-7a42d9d62a42741e448c426f"
}
}
Header entfernen
Um einen Header mit curl zu entfernen, müssen Sie den Namen des Headers gefolgt von einem Doppelpunkt ohne Wert angeben.
Um beispielsweise den Standard-Header „User-Agent“ zu entfernen, senden Sie den folgenden Befehl:
curl -H „User-Agent:” http://httpbin.org/headers
Die Antwort enthält den User-Agent- Header nicht, was bestätigt, dass der Header entfernt wurde:
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-65fd862d-13b181583501ae11046374a1"
}
}
Mehrere Header senden
Bisher haben Sie Beispiele gesehen, die nur einen Header enthalten, aber es ist möglich, mit curl mehr als einen Header zu senden. Dazu müssen Sie lediglich das Flag -H mehrmals einfügen.
Wenn Sie beispielsweise zwei Header (Custom-Header-1 und Custom-Header-2) mit den Werten eins und zwei senden möchten, führen Sie den folgenden Befehl aus:
curl -H "Custom-Header-1: one" -H "Custom-Header-2: two" http://httpbin.org/headers
Ihre Ausgabe sieht dann wie folgt aus:
{
"headers": {
"Accept": "*/*",
"Custom-Header-1": "one",
"Custom-Header-2": "two",
"Host": "httpbin.org",
"User-Agent": "curl/7.55.1",
"X-Amzn-Trace-Id": "Root=1-65fd8781-143be3502c559bc5605fc6f1"
}
}
Fazit
In diesem Artikel haben Sie etwas über HTTP-Header gelernt und erfahren, wie Sie HTTP-Header mit curl senden können.
Wenn Sie auf der Suche nach einer umfassenden Web-Scraping-Lösung sind, probieren SieBright Data aus. Es bietet Tools und Dienste wieProxy-Dienste, die Anonymität gewährleisten und IP-Blockierungen verhindern, sowieWeb Unlocker, mit dem Sie ohne CAPTCHAs auf geografisch eingeschränkte Inhalte zugreifen können.
Starten Sie noch heute die Gratis-Testversion!