Um das Ziel dieses Artikels zu erreichen, nämlich zu lernen, wie man cURL mit einem Proxy verwendet, müssen wir zunächst cURL vorstellen. Client URL (cURL) ist, kurz gesagt, eine benutzerfreundliche Befehlszeile, die für Entwickler entwickelt wurde, um Daten von einem Server abzurufen.
Was ist cURL?
Wie verwendet man cURL?
Wie ich oben bereits erwähnt habe, ist die Verwendung von cURL ziemlich unkompliziert und ermöglicht es, Informationen mit nur einem einzeiligen Befehl abzurufen. Zunächst müssen Sie ein Terminal öffnen und „curl“ gefolgt von einem Website-Link eingeben, zum Beispiel:
$ curl 'https://www.webscrapingapi.com/'
Herzlichen Glückwunsch, Sie haben Ihre erste Anfrage mit cURL gestellt. Dieser einfache Befehl fordert Informationen vom Server an, genau wie ein herkömmlicher Browser, und gibt den HTML-Code der Seite zurück. Nicht jede Website gibt HTML zurück; es gibt Endpunkte, die Daten als JSON-Objekt zurücksenden. Nehmen wir dieses Beispiel:
$ curl 'https://jsonplaceholder.typicode.com/todos/3'
Geben Sie diesen Befehl in Ihr Terminal ein, und Sie sollten folgende Antwort erhalten:
{
"userId": 1,
"id": 3,
"title": "fugiat veniam minus",
"completed": false
}Die meisten APIs geben entweder HTML oder JSON zurück, wenn Sie cURL-Befehle auf sie anwenden. Nun, das ist noch nicht alles, was cURL für uns tun kann. In Wirklichkeit ist es ein sehr ausgefeiltes Tool, dessen Beherrschung viel Zeit erfordert. Wenn Sie mehr über cURL erfahren möchten, empfehle ich Ihnen dringend, einen Blick in die cURL-Dokumentation zu werfen, um ein besseres Verständnis für die Parameter zu erhalten. Alternativ können Sie den folgenden Befehl ausführen:
$ curl --help
Dadurch werden Ihnen einige Optionen angezeigt, die Sie für cURL festlegen können:
Usage: curl [options...] <url>
-d, --data <data> HTTP POST data
-f, --fail Fail silently (no output at all) on HTTP errors
-h, --help <category> Get help for commands
-i, --include Include protocol response headers in the output
-o, --output <file> Write to file instead of stdout
-O, --remote-name Write output to a file named as the remote file
-s, --silent Silent mode
-T, --upload-file <file> Transfer local FILE to destination
-u, --user <user:password> Server user and password
-A, --user-agent <name> Send User-Agent <name> to server
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.For all options use the manual or "--help all".
Wie du wahrscheinlich sehen kannst, sind das noch nicht einmal alle Optionen, die du für cURL einstellen kannst; es handelt sich um ein in Kategorien unterteiltes Menü. Du hast wahrscheinlich schon erraten, dass du, um alle Optionen anzuzeigen, die du ausführen möchtest:
$ curl --help all
Die alleinige Verwendung von cURL hat jedoch einige Einschränkungen hinsichtlich der Anzahl der Server, von denen wir Daten abrufen können. Beispielsweise können einige Server Geolokalisierung nutzen und uns aufgrund unseres Standorts die gewünschten Daten verweigern. In diesem Moment benötigen wir einen Proxy, der als Vermittler zwischen uns und dem Zielserver fungiert.
Was ist ein Proxy?
Das Konzept eines Proxy-Servers ist überhaupt nicht schwer zu verstehen. Wie bereits oben erwähnt, ist ein Proxy-Server wie ein Vermittler zwischen einem Client, der eine Ressource anfordert, und dem Server, der diese Ressource bereitstellt. Proxys dienen dazu, dass wir Daten von überall abrufen können. Um dieses Konzept besser zu verstehen, nehmen wir an, wir haben einen Server namens Bob, der einige Daten besitzt, an denen wir interessiert sind, aber Bob stellt diese Daten nur bereit, wenn wir uns in Europa befinden, wir befinden uns jedoch in den Vereinigten Staaten.
Wie gehen wir damit um? Wir senden unsere Anfrage an einen Proxy-Server, der sich in Europa befindet, und nicht an Bob, und teilen dem Proxy mit, dass wir bestimmte Daten von Bob abrufen möchten. Der Proxy leitet die Anfrage an Bob weiter, und Bob sendet die Daten an den Proxy-Server zurück, da sich dieser in Europa befindet. Anschließend sendet der Proxy-Server die Daten von Bob an uns zurück.
Das ist der grundlegende Ablauf der Funktionsweise von Proxys. Ein weiterer guter Anwendungsfall für einen Proxy ist beispielsweise, wenn wir Daten abrufen möchten, die Preise in einer bestimmten Währung enthalten, um Verwirrung zu vermeiden. Für ein tieferes Verständnis von Proxys empfehle ich Ihnen dringend, einen Blick auf Wikipedia zu werfen.
Proxy-Einrichtung
Um einen Proxy zu nutzen, benötigen Sie höchstwahrscheinlich einen Host, einen Port, einen Benutzernamen, ein Passwort und eine Ziel-URL, von der Sie Daten abrufen möchten. In diesem Beispiel werde ich einen von WebScrapingAPI bereitgestellten Proxy für die Abfragen verwenden; weitere Informationen dazu finden Sie hier. WebScrapingAPI ist kein Proxy-Anbieter, sondern ein Web-Scraping-Dienst, der Proxys bereitstellt. In unseren Beispielen sieht unsere Konfiguration wie folgt aus:
- Proxy-Hostname: proxy.webscrapingapi.com
- Proxy-Port: 80
- Proxy-Benutzername: webscrapingapi.proxy_type=datacenter.device=desktop
- Proxy-Passwort: <IHR-API-SCHLÜSSEL-HIER> // Sie können einen erhalten, indem Sie sich hier registrieren
- Ziel-URL: http://httpbin.org/get
Bitte beachten Sie, dass es einige Proxy-Anbieter geben kann, die ein anderes Authentifizierungsschema erfordern.
Wie verwendet man cURL mit einem Proxy?
Nachdem wir uns nun mit cURL und Proxys befasst haben, sind wir bereit, beides zu kombinieren und Anfragen über einen Proxy zu stellen – ein recht unkomplizierter Vorgang. Zunächst müssen wir uns authentifizieren, dann können wir den Proxy nutzen.
Proxy-Authentifizierung in cURL
Die Proxy-Authentifizierung in cURL ist recht einfach und lässt sich für unser obiges Beispiel wie folgt durchführen:
$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY> --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get
Wenn wir diesen Befehl ausführen, gibt uns httpbin unsere IP-Adresse und einige andere Eigenschaften zurück:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5173.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-633af93b-35faf8637f37f7f075f185ec"
},
"origin": "45.9.120.69",
"url": "http://httpbin.org/get"
}Wie du wahrscheinlich bereits erkennen kannst, ist der zurückerhaltene Ursprung nicht deine IP-Adresse, sondern die Adresse des Proxy-Servers. Außerdem kannst du den Befehl ausführen, ohne dein Passwort im Terminal preiszugeben. Dies geht wie folgt:
$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get
Anschließend werden Sie aufgefordert, Ihr Passwort einzugeben:
Enter proxy password for user 'webscrapingapi.proxy_type=datacenter.device=desktop':
Nun können Sie Ihren API-Schlüssel dort eingeben, ohne ihn im Terminal preiszugeben, was den gesamten Vorgang sicherer macht. Außerdem ist es vielleicht nicht ideal, Ihre Anmeldedaten, den Host und den Port jedes Mal einzugeben, wenn Sie einen cURL-Befehl über einen Proxy ausführen möchten – insbesondere, wenn Sie viele Befehle über einen Proxy ausführen wollen und denselben Proxy-Anbieter nutzen.
Natürlich können Sie Ihre Anmeldedaten in einer separaten Datei auf Ihrem Rechner speichern und sie jedes Mal kopieren und einfügen, aber es gibt einen natürlicheren Ansatz, nämlich die Übergabe über Umgebungsvariablen, auf die wir im Folgenden eingehen werden.
Verwendung von cURL mit einem Proxy über Umgebungsvariablen
Eine Umgebungsvariable ist wie ein Objekt, das einen bearbeitbaren Wert im Speicher ablegt, der von einer oder mehreren Softwareanwendungen genutzt werden kann. In diesem speziellen Fall können wir an cURL eine Variable namens http_proxy oder https_proxy übergeben, die unsere Proxy-Daten enthält, sodass wir diese nicht bei jeder Ausführung des Befehls neu angeben müssen. Das erreichen Sie mit folgendem Befehl:
$ export http_proxy="http://webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY>@proxy.webscrapingapi.com:80"
Bitte beachten Sie, dass Sie Ihre Variable http_proxy oder https_proxy nennen müssen, damit cURL versteht, worum es geht. Das war’s schon – jetzt müssen Sie Ihre Anmeldedaten nicht mehr bei jedem Ausführen übergeben und können cURL ganz einfach wie folgt ausführen:
$ curl http://httpbin.org/get
Das liefert uns die folgende Ausgabe:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-633bf912-66ace1104304ddaf5ea8ac65"
},
"origin": "132.255.134.104",
"url": "http://httpbin.org/get"
}Wie Sie wahrscheinlich sehen, ist die IP-Adresse die Adresse des Proxys, was bestätigt, dass Sie Ihren Proxy erfolgreich eingerichtet haben. An dieser Stelle können wir jeden cURL-Befehl ausführen, ohne die Proxy-Daten anzugeben; cURL kümmert sich für uns darum.
Deaktivieren des Proxys für einen bestimmten Befehl
Wenn du jedoch eine bestimmte Anfrage ohne Proxy senden musst, brauchst du dir keine Gedanken darüber zu machen, den Wert der Variable `http_proxy` zu löschen. Als leistungsstarkes Tool mit vielen Optionen kann cURL das für uns übernehmen – mithilfe des Proxy-Parameters, der angibt, dass bei der Anfrage kein Proxy verwendet werden soll. Das geht wie folgt:
$ curl --noproxy "*" http://httpbin.org/get
Dadurch erhalten wir unsere eigene IP-Adresse zurück, nicht die des Proxys.
Zusammenfassung
Zusammenfassend lässt sich sagen, dass die Verwendung von cURL mit einem Proxy eine hervorragende Möglichkeit ist, Geolokalisierungsfilter zu umgehen, die Anzahl der Ressourcen erweitert, die wir von Webservern abrufen können, und einen guten Einstieg in Themen wie Web-Scraping bietet, bei denen wir Proxys verwenden müssen, um bestimmte Daten zu erhalten oder sie in dem von uns gewünschten Format zu empfangen.Ich hoffe, dieser Artikel hat euch dabei geholfen, den Umgang mit cURL und einem Proxy zu erlernen, und dass ihr damit experimentieren und eigene Skripte erstellen werdet, die Daten von Servern extrahieren, die Geolokalisierungsfilter verwenden.




