In diesem Leitfaden erfahren Sie Folgendes:
- Was cURL-Impersonate ist
- Hintergründe des Projekts und dessen Funktionsweise
- Verwendung über die Befehlszeile
- Wie man es in Python verwendet
- Fortgeschrittene Techniken und Aspekte
Legen wir also gleich los!
Was ist cURL-Impersonate?
cURL-Impersonate ist eine spezielle Version von cURL, die das Verhalten der wichtigsten Browser (Chrome, Edge, Safari und Firefox) nachahmt. Im Detail führt dieses Tool TLS- und HTTP-Handshakes aus, die denen echter Browser sehr ähnlich sind.
Der HTTP-Client kann entweder über das Befehlszeilentool curl-Impersonate
, ähnlich wie das reguläre curl
, oder als Bibliothek in Python verwendet werden.
Dies sind die Browser, die imitiert werden können:
Browser | Simuliertes Betriebssystem | Wrapper-Skript |
Chrome 99 | Windows 10 | curl_chrome99 |
Chrome 100 | Windows 10 | curl_chrome100 |
Chrome 101 | Windows 10 | curl_chrome101 |
Chrome 104 | Windows 10 | curl_chrome104 |
Chrome 107 | Windows 10 | curl_chrome107 |
Chrome 110 | Windows 10 | curl_chrome110 |
Chrome 116 | Windows 10 | curl_chrome116 |
Chrome 99 | Android 12 | curl_chrome99_android |
Edge 99 | Windows 10 | curl_edge99 |
Edge 101 | Windows 10 | curl_edge101 |
Firefox 91 ESR | Windows 10 | curl_ff91esr |
Firefox 95 | Windows 10 | curl_ff95 |
Firefox 98 | Windows 10 | curl_ff98 |
Firefox 100 | Windows 10 | curl_ff100 |
Firefox 102 | Windows 10 | curl_ff102 |
Firefox 109 | Windows 10 | curl_ff109 |
Firefox 117 | Windows 10 | curl_ff117 |
Safari 15.3 | macOS Big Sur | curl_safari15_3 |
Safari 15.5 | macOS Monterey | curl_safari15_5 |
Für jeden unterstützten Browser existiert ein spezielles Wrapper-Skript. Dieses konfiguriert curl-Impersonate
mit den entsprechenden Headern, Flags und Einstellungen, um den jeweiligen Browser zu simulieren.
Funktionsweise von curl-Impersonate
Sobald Sie eine Anfrage an eine Website über HTTPS senden, wird ein Prozess mit der Bezeichnung TLS-Handshake ausgelöst. Während dieses Handshakes werden Details über den HTTP-Client an den Web-Server übermittelt, wodurch ein eindeutiger TLS-Fingerabdruck erstellt wird.
HTTP-Clients verfügen über Fähigkeiten und Konfigurationen, die sich von denen eines standardmäßigen Browsers unterscheiden. Diese Diskrepanz führt zu einem TLS-Fingerabdruck, der den Einsatz von HTTP-Clients mühelos aufdecken kann. Folglich können die von der Zielseite verwendeten Anti-Bot-Maßnahmen Ihre Anfragen als automatisiert erkennen und sie möglicherweise blockieren.
cURL-Impersonate behebt dieses Problem, indem es das Standard-Tool curl
so modifiziert, dass sein TLS-Fingerabdruck dem von echten Browsern entspricht. Auf diese Weise wird das Ziel erreicht:
- Änderung der TLS-Bibliothek: Für die Chrome-Version von
curl-Impersonate
wirdcurl
mit BoringSSL, der TLS-Bibliothek von Google, kompiliert. Bei der Firefox-Version wirdcurl
mit NSS kompiliert, der von Firefox verwendeten TLS-Bibliothek. - Anpassungen der Konfiguration: Die Art und Weise, wie cURL verschiedene TLS-Erweiterungen und SSL-Optionen konfiguriert, wird geändert, um die Einstellungen von echten Browsern nachzuahmen. Außerdem wird Unterstützung für neue TLS-Erweiterungen ergänzt, die häufig von Browsern verwendet werden.
- HTTP/2-Handshake-Anpassung: Hier werden die von cURL für HTTP/2-Verbindungen verwendeten Einstellungen geändert, um diese an die von echten Browsern anzupassen.
- Nicht-standardmäßige Flags: Die Funktion wird mit bestimmten nicht-standardmäßigen Flags ausgeführt, wie beispielsweise
--ciphers
,--curves
und einigen -H-Headern, die zusätzlich zur Nachahmung des Browserverhaltens beitragen.
Dadurch bewirkt curl-Impersonate
, dass Curl-
Anfragen aus der Netzwerkperspektive so aussehen, als ob sie von einem echten Browser gestellt wurden. Dies ist zur Umgehung diverser Bot-Erkennungsmechanismen von Nutzen!
curl-impersonate: Tutorial zu Befehlszeilen
Führen Sie die nachfolgenden Schritte aus, um die Verwendung von cURL-Impersonate über die Befehlszeile zu erlernen.
Hinweis: Aus Gründen der Vollständigkeit werden mehrere Installationsmethoden angezeigt. Sie müssen sich jedoch nur für eine entscheiden. Die empfohlene Methode ist die Nutzung von Docker.
Installation aus vorkompilierten Binärdateien
Sie können vorkompilierte Binärdateien für Linux und macOS von der GitHub-Veröffentlichungsseite des Projekts herunterladen. Diese Binärdateien beinhalten ein statisch kompiliertes curl-Impersonate
. Vergewissern Sie sich vor der Verwendung, dass Sie die folgenden Komponenten installiert haben:
- NSS (Network Security Services): Eine Reihe von Bibliotheken, die zur Unterstützung der plattformübergreifenden Entwicklung von sicherheitsrelevanten Client- und Server-Anwendungen konzipiert wurden. NSS wird in Mozilla-Produkten wie Firefox und Thunderbird zur Verwaltung des TLS-Protokolls verwendet.
- CA-Zertifikate: Eine Sammlung von digitalen Zertifikaten, die während der sicheren Kommunikation die Identität von Servern und Clients authentifizieren. Diese Zertifikate gewährleisten, dass Ihre Serververbindung vertrauenswürdig ist, indem sie sicherstellen, dass das Zertifikat des Servers von einer anerkannten Zertifizierungsstelle ( CA) unterzeichnet wurde.
Um die Voraussetzungen zu erfüllen, führen Sie unter Ubuntu Folgendes aus:
sudo apt install libnss3 nss-plugin-pem ca-certificates
Auf Red Hat, Fedora oder CentOS, führen Sie Folgendes aus:
yum install nss nss-pem ca-certificates
Auf Archlinux, initiieren Sie:
pacman -S nss ca-certificates
Auf macOS führen Sie folgenden Befehl aus:
brew install nss ca-certificates
Stellen Sie außerdem sicher, dass Sie zlib
auf Ihrem System installiert haben, da die vorkompilierten Binärpakete gzipped sind.
Installation über Docker
Docker-Images, die auf Alpine Linux und Debian beruhen und bei denen curl-Impersonate kompiliert und einsatzbereit ist, sind auf Docker Hub verfügbar. Diese Images enthalten die Binärdatei sowie alle notwendigen Wrapper-Skripte.
Chrome-Images (*-chrome
) können sich als Chrome, Edge und Safari ausgeben. Firefox-Images(*-ff
) hingegen können Firefox nachahmen.
Um das von Ihnen bevorzugte Docker-Image herunterzuladen, führen Sie einen der folgenden Befehle aus.
Für die Chrome-Version auf Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-chrome
Für die Firefox-Version auf Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-ff
Für die Chrome-Version auf Debian:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
Für die Firefox-Version auf Debian:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
Nach dem Herunterladen können Sie – wie Sie gleich sehen werden – curl-Impersonate
mit einem Docker-Befehl ausführen.
Installation aus Distributionspaketen
Unter Arch Linux ist curl-Impersonate
über das AUR-Paket curl-Impersonate-bin
verfügbar.
Unter macOS können Sie das nicht offizielle Homebrew-Paket für die Chrome-Version mit folgenden Befehlen installieren:
brew tap shakacode/brew
brew install curl-impersonate
Grundlegende Verwendung
Unabhängig von der Installationsmethode können Sie nun einen curl-Impersonate-
Befehl mit folgender Syntax ausführen:
curl-impersonate-wrapper [options] [target-url]
Oder, entsprechend, auf Docker, führen Sie in etwa Folgendes aus:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
Wo:
curl-Impersonate-wrapper
ist der cURL-Impersonate-Wrapper, den Sie verwenden wollen (z. B.curl_chrome116
,curl_edge101
,curl_ff117
,curl_safari15_5
, usw.).- Bei
Optionen
handelt es sich um die optionalen Flags, die an cURL weitergegeben werden. target-url
ist die URL der Website, an die eine HTTP-Anfrage gestellt werden soll.
SGehen Sie bei der Angabe von benutzerdefinierten Optionen behutsam vor, da einige Flags die TLS-Signatur von cURL verändern, wodurch sie möglicherweise entdeckt werden kann. Weitere Informationen finden Sie in unserer Einleitung zu CURL.
Beachten Sie, dass die Wrapper standardmäßig eine Sammlung von HTTP-Headern setzen. Zur Anpassung dieser Header müssen Sie die Wrapper-Skripte an Ihre Bedürfnisse angleichen.
Verwenden wir nun curl-Impersonate
, um mit einem Chrome-Wrapper eine Anfrage an die Wikipedia-Homepage zu stellen:
curl_chrome110 https://www.wikipedia.org
Oder, falls Sie ein Docker-Benutzer sind:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
Das Ergebnis wird wie folgt lauten:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Wunderbar! Der Server gibt den HTML-Code der gewünschten Seite zurück, als ob Sie über einen Browser darauf zugreifen würden.
Sie können jetzt cURL-Impersonate genauso für Web-Scraping verwenden, wie Sie dies mit cURL für Web-Scraping tun würden.
curl-impersonate
: Python-Tutorial
Die Verwendung der Befehlszeile eignet sich hervorragend für Testzwecke, Web-Scraping-Prozesse beruhen jedoch in der Regel auf benutzerdefinierten Skripts, die in Sprachen wie Python geschrieben wurden. Entdecken Sie die besten Programmiersprachen für Web-Scraping!
Glücklicherweise können Sie cURL-Impersonate dank curl-cffi
in Python verwenden. Es handelt sich hierbei um eine Python-Anbindung für curl-Impersonate
über cffi
Vor allem kann curl-cffi
die TLS/JA3- und HTTP/2-Fingerabdruck von Browsern nachahmen, um sich mit Websites zu verbinden, ohne blockiert zu werden.
Erfahren Sie im folgenden Abschnitt Schritt für Schritt, wie Sie es verwenden können!
Voraussetzungen
Bevor Sie loslegen, stellen Sie Folgendes sicher:
- Auf Ihrem Rechner ist Python 3.8 oder höher installiert.
- Ein Python-Projekt mit einer eingerichteten virtuellen Umgebung
Wahlweise wird eine Python-IDE wie Visual Studio Code mit der Python-Erweiterung empfohlen.
Installation
Installieren Sie curl_cfii
über pip wie folgt:
pip install curl_cfii
Verwendung
curl_cffi
bietet sowohl eine Low-level curl-
API als auch eine High-level requests-ähnliche API. Erfahren Sie mehr in der offiziellen Dokumentation.
Normalerweise wird die requests-ähnliche API verwendet. Importieren Sie hierzu requests
aus curl_cffi
:
from curl_cffi import requests
Sie können nun die Chrome-Version von cURL-Impersonate in Python verwenden, um sich mit einer Website zu verbinden:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
Print the response HTML with:
print(response.text)
Put it all together, and you will get:
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)
Run the above Python script, and it will print:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
Großartig! Jetzt sind Sie bereit, Web-Scraping in Python durchzuführen, genauso wie Sie es mit Requests und Beautiful Soup tun würden. Weitere Anleitungen finden Sie in unserem Leitfaden zu Web-Scraping mit Python.
Fortgeschrittene Verwendung von cURL-Impersonate
Es ist an der Zeit, sich mit einigen fortgeschrittenen Einsatzmöglichkeiten und Techniken zu befassen!
Proxy-Integration
Das Simulieren von Browser-Fingerabdruck könnte unter Umständen nicht genügen. Anti-Bot-Lösungen können Sie eventuell weiterhin blockieren, vor allem, wenn Sie zu viele automatische Anfragen in einer kurzen Zeitspanne stellen Hier kommen Proxys ins Spiel!
Indem Sie Ihre Anfrage über einen Proxy-Server leiten, können Sie eine neue IP-Adresse abrufen und Ihre Identität schützen.
Nehmen wir an, die URL zu Ihrem Proxy-Server lautet:
http://84.18.12.16:8888
cURL-Impersonate unterstützt die Proxy-Integration über die Befehlszeile mit dem Flag-x:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
Weitere Einzelheiten finden Sie in der Anleitung zur Einrichtung eines Proxys in cURL.
In Python können Sie einen Proxy auf ähnliche Weise einrichten, wie Sie dies bei Anfragen
tun würden:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
Weitere Informationen finden Sie unter Integration eines Proxys in Python-Anfragen.
Libcurl-Integration
libcurl-impersonate ist eine kompilierte Version von libcurl
, die über dieselbe Funktionalität wie cURL-Impersonate verfügt. Darüber hinaus bietet sie eine erweiterte API zur Anpassung von TLS-Details und Header-Konfigurationen.
libcurl-Impersonate
lässt sich über das vorkompilierte Paket installieren. Ziel dieser Lösung ist es, die Integration von cURL-Impersonate in Bibliotheken verschiedener Programmiersprachen zu erleichtern, wie etwa das curl-cffi
Python-Paket .
Fazit
In diesem Artikel haben Sie gelernt, was cURL-Impersonate ist, wie es funktioniert und wie es sowohl über CLI als auch in Python verwendet werden kann. Nun verstehen Sie, dass es sich dabei um ein Tool handelt, mit dem Sie HTTP-Anfragen stellen und dabei den TLS-Fingerabdruck von echten Browsern simulieren können.
Allerdings können fortschrittliche Anti-Bot-Lösungen wie Cloudflare Ihre Anfragen immer noch als von einem Bot eingehende Anfragenerkennen. Wie lautet die Lösung? Scraper-API von Bright Data – eine umfassende Scraping-Lösung der nächsten Generation.
Die Scraper-API bietet alles, was Sie zum Ausführen automatisierter Web-Anfragen mit cURL oder einem anderen HTTP-Client benötigen. Mit dieser umfassenden Lösung können Sie Browser-Fingerabdrücke erstellen, CAPTCHAs auflösen und die IP-Rotation nutzen, um jede Anti-Bot-Technologie zu umgehen. Es war noch nie so einfach, automatisierte HTTP-Anfragen auszuführen!
Melden Sie sich jetzt für eine kostenlose Testversion der Web-Scraping-Infrastruktur von Bright Data an oder sprechen Sie mit einem unserer Datenexperten über unsere Scraping-Lösungen.
Keine Kreditkarte erforderlich