Umgehen von Einschränkungen und effektives Scrapen von Daten mit Proxies und C# HttpClient

Suciu Dan am 13. April 2023

blog-image

Web Scraping ist ein leistungsfähiges Werkzeug, mit dem Sie wertvolle Daten aus Websites für verschiedene Zwecke extrahieren können. Viele Websites blockieren jedoch Scraping-Versuche, um ihre Daten zu schützen. Eine Möglichkeit, diese Sperren zu umgehen, ist die Verwendung eines Proxyservers.

In diesem Artikel wird untersucht, wie ein Proxy mit C# HttpClient, einer beliebten Bibliothek für HTTP-Anfragen in C#, verwendet werden kann. Wir werden die Voraussetzungen, die Einrichtung und Tipps für die Fehlersuche und -behebung behandeln.

Außerdem wird erläutert, wie man eine Anfrage sendet und die Leistung der Anfragen verbessert. Am Ende dieses Artikels werden Sie ein gutes Verständnis dafür haben, wie man einen Proxy mit C# HttpClient verwendet und wie er Ihre Web-Scraping-Bemühungen unterstützen kann.

Was sind Proxys?

Proxys, die auch als Proxy-Server bezeichnet werden, fungieren als Vermittler zwischen einem Client (z. B. einem Webbrowser oder Scraper) und einem Zielserver (z. B. einer Website). Der Client sendet eine Anfrage an den Proxy, der sie dann an den Zielserver weiterleitet.

Sobald der Zielserver antwortet, sendet der Proxy die Antwort zurück an den Client. Beim Web-Scraping kann der Einsatz von Proxys die IP-Adresse des Scrapers maskieren und verhindern, dass die Website die Anfrage erkennt und blockiert.

Die Verwendung mehrerer Proxys kann auch dazu beitragen, dass Sie nicht entdeckt und blockiert werden. Einige Proxy-Anbieter bieten sogar die Möglichkeit, die IPs zu rotieren, was einen zusätzlichen Schutz davor bietet, dass Ihre Anfragen blockiert werden.

Erstellen eines C#-Projekts

In diesem Artikel wird Visual Studio 2022 für Windows und .Net 6.0 verwendet. Um diesem Artikel zu folgen, öffnen Sie Visual

blog-image

Wählen Sie in Visual Studio in der Dropdown-Liste Alle Sprachen die Option C#. Wenn die Konsolenanwendungsvorlage nicht sichtbar ist, verwenden Sie die Eingabe Nach Vorlagen suchen, um sie zu finden. Klicken Sie dann auf Weiter.

Wählen Sie auf dem nächsten Bildschirm den Ort für Ihr Projekt aus. Klicken Sie dann auf Weiter, um zum Bildschirm Zusätzliche Informationen zu gelangen. Stellen Sie sicher, dass Sie .NET 7.0 ausgewählt haben, bevor Sie auf Erstellen klicken.

blog-image

Nach der Projekterstellung sehen Sie den Hello World-Code auf dem Bildschirm:

// See https://aka.ms/new-console-template for more information

Console.WriteLine("Hello, World!");

Eine HTTP-Anfrage stellen

Lassen Sie uns unsere erste Anfrage mit `HttpClient` stellen. Ersetzen Sie den Dummy-Code durch diesen:

using var client = new HttpClient();

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result);

Dieser Code verwendet die HttpClient-Klasse aus dem System.Net.Http-Namespace, um eine HTTP-GET-Anforderung an den Endpunkt https://api.ipify.org/ zu senden und die Antwort als Zeichenfolge abzurufen.

Hier ist eine Aufschlüsselung des Codes:

  • using var client = new HttpClient();`: Diese Zeile erzeugt eine neue Instanz der Klasse "HttpClient" und weist sie der Variablen "client" zu. Die Anweisung `using` stellt sicher, dass das Client-Objekt korrekt entsorgt wird, sobald es nicht mehr benötigt wird.
  1. `var result = await client.GetStringAsync("https://api.ipify.org/");`: Diese Zeile verwendet die Methode `GetStringAsync()` des Client-Objekts, um eine GET-Anfrage an den Endpunkt https://api.ipify.org/ zu senden. Diese Methode liest die Antwort als String und speichert sie in der Variablen result. Das Schlüsselwort await macht die Anfrage asynchron, so dass das Programm mit der Ausführung von anderem Code fortfahren kann, während die Anfrage bearbeitet wird.
  2. Console.WriteLine(result);`: Diese Zeile schreibt den Inhalt der Ergebnisvariablen in die Konsole, die die Antwort auf die GET-Anfrage darstellt.

Speichern Sie den Code und führen Sie ihn aus. Sie sehen Ihre IP-Adresse im Terminal.

Verwendung von Proxies mit HttpClient

Bevor wir uns wieder an die Programmierung machen, besuchen Sie die Website Free Proxy List und wählen Sie einen Proxy aus, der Ihrem Standort am nächsten ist. Für dieses Beispiel werde ich einen Proxy in Deutschland auswählen. Notieren Sie sich die IP-Adresse und den Port des ausgewählten Proxys.

Um einen Proxy mit HttpClient zu verwenden, müssen wir eine HttpClientHandler-Instanz erstellen. In dieser Instanz legen wir zwei Eigenschaften fest: die Proxy-URL und den Port sowie `ServerCertificateCustomValidationCallback`. Das ist ein langer Name für eine Variable, aber er ist wichtig.

ServerCertificateCustomValidationCallback" weist den HttpClientHandler an, HTTPS-Zertifikatsfehler zu ignorieren. Sie fragen sich vielleicht, warum Sie das tun müssen.

Der Proxyserver fängt den Datenverkehr ab und prüft ihn, einschließlich des HTTPS-Zertifikats, bevor er ihn an den Zielserver weiterleitet. Infolgedessen kann sich das vom Zielserver dem Proxyserver vorgelegte Zertifikat von dem dem Client vorgelegten unterscheiden.

Standardmäßig überprüfen der HttpClient und andere ähnliche Bibliotheken das vom Zielserver vorgelegte Zertifikat, und wenn es nicht gültig ist oder nicht mit dem dem Client vorgelegten Zertifikat übereinstimmt, wird eine Ausnahme ausgelöst. Dies ist der Grund für die Zertifikatsfehler.

Das Ignorieren von HTTPS-Zertifikatsfehlern im Proxymodus ermöglicht es, die Anfrage fortzusetzen, auch wenn das Zertifikat ungültig ist, was in einigen Fällen nützlich ist, in denen das Zertifikat vom Proxyserver abgefangen und geändert wird.

Es ist an der Zeit, den Code zu schreiben. Beginnen wir mit der HttpClientHandler-Instanz:

using System.Net;

using var httpClientHandler = new HttpClientHandler

{

Proxy = new WebProxy("http://5.9.139.204:24000"),

ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

Wir müssen die HttpClient-Klasse mit einer Instanz des HttpClientHandlers versehen. Der geänderte Client-Code sollte wie folgt aussehen:

using var client = new HttpClient(httpClientHandler);

Der gesamte Code sollte wie folgt aussehen:

using System.Net;

using var httpClientHandler = new HttpClientHandler

{

Proxy = new WebProxy("http://5.9.139.204:24000"),

ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

using var client = new HttpClient(httpClientHandler);

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result);

Wenn Sie den Code ausführen, wird die IP-Adresse des Proxys anstelle Ihrer IP-Adresse zurückgegeben. Sie können die ipify-URL in Ihrem Browser öffnen und die Ergebnisse vergleichen.

Beginnen wir mit der Authentifizierung

Wenn Sie sich für einen Premium-Proxy-Dienst anmelden, erhalten Sie einen Benutzernamen und ein Passwort, die Sie in Ihrer Anwendung zur Authentifizierung verwenden können.

Es ist an der Zeit, die WebProxy-Definition durch diese zu ersetzen:

Proxy = new WebProxy

{

Address = new Uri($"http://5.9.139.204:24000"),

Credentials = new NetworkCredential(

userName: "PROXY_USERNAME",

password: "PROXY_PASSWORD"

)

},

Wenn Sie die Platzhalter-Anmeldeinformationen ersetzen, die Proxy-URL aktualisieren und den Code ausführen, werden Sie feststellen, dass sich die ausgegebene IP-Adresse von der auf Ihrem Computer verwendeten unterscheidet. Probieren Sie es aus!

Rotierende Proxys

Das Rotieren von Proxys ist von Vorteil, da es hilft, eine Entdeckung zu vermeiden und verhindert, dass Websites Ihre IP-Adresse blockieren. Websites können IP-Adressen überwachen und blockieren, die in kurzer Zeit übermäßig viele Anfragen stellen oder die mit Scraping-Aktivitäten in Verbindung stehen.

Wir können die Website Free Proxy List nutzen, um eine Liste von Proxys zu erstellen, die wir bei jeder gesendeten Anfrage austauschen können. Durch diese Technik hat jede Anfrage eine eigene IP-Adresse, was die Ziel-Website weniger verdächtig macht.

Bitte beachten Sie, dass die Liste der Proxys, die Sie auf der Website finden, von der Liste abweichen kann, die ich zusammengestellt habe. Ich habe fünf Proxys ausgewählt und sie in einer Liste wie dieser definiert:

List<string> proxiesList = new List<string> {

"http://65.108.230.238:45977",

"http://163.116.177.46:808",

"http://163.116.177.31:808",

"http://20.111.54.16:80",

"http://185.198.61.146:3128"

};

Wählen wir einen zufälligen Index aus dieser Liste aus und verwenden das Element aus diesem ausgewählten Index mit der Klasse Uri:

var random = new Random();

int index = random.Next(proxiesList.Count);

Jetzt müssen wir nur noch alle Teile zusammenfügen. Die endgültige Version Ihres Scraper-Codes sollte wie folgt aussehen:

using System.Net;

List<string> proxiesList = new List<string> {

"http://65.108.230.238:45977",

"http://163.116.177.46:808",

"http://163.116.177.31:808",

"http://20.111.54.16:80",

"http://185.198.61.146:3128"

};

var random = new Random();

int index = random.Next(proxiesList.Count);

using var httpClientHandler = new HttpClientHandler

{

Proxy = new WebProxy(proxiesList[index]),

ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

using var client = new HttpClient(httpClientHandler);

var result = await client.GetStringAsync("https://api.ipify.org?format=json");

Console.WriteLine(result);

Verwendung von WebScrapingAPI Proxies

Premium-Proxys von einem Dienst wie WebScrapingAPI sind eine bessere Wahl als kostenlose Proxys, da sie zuverlässiger und schneller sind und mehr Sicherheit bieten. Premium-Proxys sind weniger anfällig dafür, von Websites blockiert zu werden und haben eine geringere Reaktionszeit.

Im Vergleich dazu können kostenlose Proxys langsam und unzuverlässig sein, Malware enthalten und eine hohe Fehlerquote aufweisen, weil die Zielsite Ihre Anfragen blockiert.

Haben Sie Interesse, WebScrapingAPI auszuprobieren? Kein Problem, melden Sie sich einfach für unsere 14-tägige kostenlose Testversion an. Sie können die 5.000 Credits nutzen, um alle verfügbaren Funktionen zu testen.

Sobald Sie ein Konto haben, gehen Sie zum API Playground und wählen Sie die Registerkarte Proxy Mode im Abschnitt Code Samples.

blog-image

Jetzt werden wir die Proxy-URL, die auf der Registerkarte Proxy-Modus generiert wurde, mit unserer C#-Implementierung verwenden.

Aktualisieren Sie die Proxy-URL und die Anmeldeinformationen im httpClientHandler so, dass sie wie folgt aussehen:

using var httpClientHandler = new HttpClientHandler

{

Proxy = new WebProxy

{

Address = new Uri($"http://proxy.webscrapingapi.com:80"),

Credentials = new NetworkCredential(

userName: "webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter",

password: "YOUR_API_KEY"

)

},

ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator

};

Sie können die Eigenschaft username verwenden, um bestimmte API-Funktionen zu aktivieren oder zu deaktivieren. Denken Sie daran, auch Ihren API-Schlüssel in der Eigenschaft password festzulegen. Die vollständige Dokumentation können Sie hier nachlesen.

Jedes Mal, wenn Sie diesen Code ausführen, erhalten Sie eine andere IP-Adresse, da WebScrapingAPI die IPs bei jeder Anfrage wechselt. Mehr über diese Funktion erfahren Sie in der Dokumentation zum Proxy-Modus.

Sie haben auch die Möglichkeit, zwischen Proxies für Rechenzentren und Proxies für Privatanwender zu wechseln. Weitere Einzelheiten dazu finden Sie im Abschnitt Proxies unserer Dokumentation.

Schlussfolgerung

Die Verwendung eines Proxys ist ein wesentlicher Aspekt des Web-Scraping, da er es Ihnen ermöglicht, Ihre IP-Adresse zu verbergen und auf eingeschränkte Websites zuzugreifen. Die HttpClient-Bibliothek von C# ist ein leistungsfähiges Tool zum Extrahieren von Daten, und in Kombination mit einem zuverlässigen Proxy können Sie eine effiziente und schnelle Datenextraktion erreichen.

Wenn Sie einen Premium-Proxy-Dienst wie WebScrapingAPI abonnieren, haben Sie Zugang zu einer breiten Palette von Funktionen, einschließlich IP-Rotation und der Möglichkeit, zwischen Proxys für Rechenzentren und Privatanwender zu wechseln.

Wir hoffen, dass dieser Artikel Ihnen ein nützliches Verständnis für die Verwendung eines Proxys mit HttpClient vermittelt hat und wie Sie davon profitieren können, wenn Sie Scraping betreiben. Sie können sich gerne für unsere 14-tägige kostenlose Testversion anmelden, um unseren Service zu testen und alle Funktionen zu erkunden.

Nachrichten und Aktualisierungen

Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Vorschaubild
LeitfädenScrapy Splash Tutorial: Die Kunst des Scrapings von JavaScript-gerenderten Websites mit Scrapy und Splash beherrschen

Lernen Sie, wie Sie mit Scrapy und Splash dynamische JavaScript-gerenderte Websites scrapen können. Von der Installation über das Schreiben eines Spiders bis hin zum Umgang mit Seitenumbrüchen und der Verwaltung von Splash-Antworten bietet dieser umfassende Leitfaden Schritt-für-Schritt-Anleitungen für Anfänger und Experten gleichermaßen.

Ștefan Răcila
Autorenavatar
Ștefan Răcila
6 Minuten lesen
Vorschaubild
AnwendungsfälleXPath vs. CSS-Selektoren

Sind XPath-Selektoren besser als CSS-Selektoren für Web Scraping? Erfahren Sie mehr über die Stärken und Grenzen der einzelnen Methoden und treffen Sie die richtige Wahl für Ihr Projekt!

Mihai Maxim
Autorenavatar
Mihai Maxim
8 Minuten lesen
Vorschaubild
LeitfädenEntsperren Sie Websites und schützen Sie Ihre Identität mit Proxies und Axios Node.js

Erfahren Sie, wie Sie Proxies mit Axios & Node.js für effizientes Web Scraping nutzen können. Tipps, Code-Beispiele und die Vorteile der Verwendung von WebScrapingAPI inklusive.

Suciu Dan
Autorenavatar
Suciu Dan
7 Minuten lesen