Zurück zum Blog
Anleitungen
Suciu DanLast updated on Mar 31, 20267 min read

Umgehen Sie Beschränkungen und erfassen Sie Daten effizient mit Proxys und dem C# HttpClient

Umgehen Sie Beschränkungen und erfassen Sie Daten effizient mit Proxys und dem C# HttpClient

Web-Scraping ist ein leistungsstarkes 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 Blockierungen zu umgehen, ist die Verwendung eines Proxy-Servers.

In diesem Artikel werden wir untersuchen, wie man einen Proxy mit C# HttpClient verwendet, einer beliebten Bibliothek für die Erstellung von HTTP-Anfragen in C#. Wir werden die Voraussetzungen, die Einrichtung sowie Tipps zur Fehlerbehebung und zum Debugging behandeln.

Außerdem gehen wir darauf ein, 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 dies Ihre Web-Scraping-Aktivitäten verbessern kann.

Was sind Proxys?

Proxys, auch als Proxy-Server bezeichnet, 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 diese dann an den Zielserver weiterleitet.

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

Die Verwendung mehrerer Proxys kann ebenfalls dazu beitragen, eine Erkennung und Sperrung zu vermeiden. Einige Proxy-Anbieter bieten sogar die Möglichkeit, IP-Adressen zu rotieren, was zusätzlichen Schutz vor der Sperrung Ihrer Anfragen bietet.

Erstellen eines C#-Projekts

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

Wählen Sie in Visual Studio im Dropdown-Menü „Alle Sprachen“ die Option „C#“ aus. Wenn die Vorlage „Konsolenanwendung“ nicht sichtbar ist, suchen Sie sie über das Eingabefeld „Nach Vorlagen suchen“. Klicken Sie anschließend auf „Weiter“.

Wählen Sie auf dem nächsten Bildschirm den Speicherort für Ihr Projekt aus. Klicken Sie anschließend auf „Weiter“, um zum Bildschirm „Zusätzliche Informationen“ zu gelangen. Vergewissern Sie sich, dass „.NET 7.0“ ausgewählt ist, bevor Sie auf „Erstellen“ klicken.

Nach der Projekterstellung wird der „Hello World“-Code auf dem Bildschirm angezeigt:

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

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

Eine HTTP-Anfrage stellen

Erstellen wir unsere erste Anfrage mit `HttpClient`. 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 Namespace System.Net.Http, um eine HTTP-GET-Anfrage 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 erstellt eine neue Instanz der `HttpClient`-Klasse und weist sie der Variablen `client` zu. Die `using`-Anweisung stellt sicher, dass das Client-Objekt ordnungsgemäß entsorgt wird, sobald es nicht mehr benötigt wird.
  • `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 Zeichenfolge und speichert sie in der Variablen `result`. Das Schlüsselwort `await` macht die Anfrage asynchron, sodass das Programm während der Verarbeitung der Anfrage mit der Ausführung anderer Codezeilen fortfahren kann.
  • `Console.WriteLine(result);`: Diese Zeile schreibt den Inhalt der Variablen `result` in die Konsole, d. h. die Antwort der GET-Anfrage.

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

Verwendung von Proxys mit HttpClient

Bevor wir zum Programmieren zurückkehren, besuche die Website „Free Proxy List“ und wähle einen Proxy aus, der deinem Standort am nächsten liegt. Für dieses Beispiel wähle ich einen Proxy in Deutschland aus. Notiere dir die IP-Adresse und den Port des ausgewählten Proxys.

Um einen Proxy mit HttpClient zu verwenden, müssen wir eine HttpClientHandler-Instanz erstellen. Innerhalb 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, alle HTTPS-Zertifikatsfehler zu ignorieren. Sie fragen sich vielleicht, warum das notwendig ist.

Der Proxy-Server fängt den Datenverkehr ab und überprüft ihn, einschließlich des HTTPS-Zertifikats, bevor er ihn an den Zielserver weiterleitet. Infolgedessen kann das Zertifikat, das der Zielserver dem Proxy-Server vorlegt, von dem abweichen, das dem Client vorgelegt wird.

Standardmäßig validieren der HttpClient und andere ähnliche Bibliotheken das vom Zielserver vorgelegte Zertifikat, und wenn es ungültig ist oder nicht mit dem dem Client vorgelegten übereinstimmt, wird eine Ausnahme ausgelöst. Daher rühren die Zertifikatsfehler her.

Das Ignorieren der HTTPS-Zertifikatsfehler bei Verwendung des Proxy-Modus ermöglicht es, die Anfrage fortzusetzen, selbst wenn das Zertifikat ungültig ist. Dies ist in einigen Fällen nützlich, in denen das Zertifikat vom Proxy-Server 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 der HttpClient-Klasse eine Instanz des HttpClientHandler übergeben. 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 Proxy-IP-Adresse anstelle Ihrer IP-Adresse zurückgegeben. Sie können die ipify-URL in Ihrem Browser öffnen und die Ergebnisse vergleichen.

Führen wir die Authentifizierung durch

Wenn du dich für einen Premium-Proxy-Dienst anmeldest, erhältst du einen Benutzernamen und ein Passwort, die du in deiner Anwendung zur Authentifizierung verwenden kannst.

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-Anmeldedaten ersetzen, die Proxy-URL aktualisieren und den Code ausführen, werden Sie feststellen, dass die ausgegebene IP-Adresse sich von der Ihres Computers unterscheidet. Probieren Sie es aus!

Proxy-Rotation

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

Wir können die Website „Free Proxy List“ nutzen, um eine Liste von Proxys zu generieren, die wir bei jeder gesendeten Anfrage rotieren können. Durch die Anwendung dieser Technik erhält jede Anfrage eine eigene IP-Adresse, wodurch die Zielwebsite weniger verdächtig erscheint.

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 folgt 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 wir das Element des ausgewählten Index mit der Uri-Klasse:

var random = new Random();

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

Jetzt müssen wir alle Teile zusammenführen. 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-Proxys

Die Entscheidung für Premium-Proxys von einem Dienst wie WebScrapingAPI ist eine bessere Wahl als die Verwendung von kostenlosen Proxys, da sie zuverlässiger und schneller sind und mehr Sicherheit bieten. Premium-Proxys werden seltener von Websites blockiert und haben eine kürzere Reaktionszeit.

Im Vergleich dazu können kostenlose Proxys langsam und unzuverlässig sein, Malware enthalten und weisen mit größerer Wahrscheinlichkeit eine hohe Ausfallrate auf, da die Zielseite Ihre Anfragen blockiert.

Möchten Sie WebScrapingAPI ausprobieren? Kein Problem, melden Sie sich einfach für unsere 14-tägige kostenlose Testversion an. Mit den 5.000 Credits können Sie alle verfügbaren Funktionen testen.

Sobald Sie ein Konto haben, gehen Sie zum API Playground und wählen Sie im Abschnitt „Code-Beispiele“ die Registerkarte „Proxy-Modus“.

Nun verwenden wir die im Reiter „Proxy-Modus“ generierte Proxy-URL mit unserer C#-Implementierung.

Aktualisieren Sie die Proxy-URL und die Anmeldedaten im httpClientHandler, sodass 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

};

Du kannst die Eigenschaft „username“ verwenden, um bestimmte API-Funktionen zu aktivieren oder zu deaktivieren. Vergiss nicht, deinen API-Schlüssel in der Eigenschaft „password“ festzulegen. Die vollständige Dokumentation findest du hier.

Jedes Mal, wenn Sie diesen Code ausführen, erhalten Sie eine andere IP-Adresse, da WebScrapingAPI die IPs bei jeder Anfrage wechselt. Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation zum Proxy-Modus.

Sie haben außerdem die Möglichkeit, zwischen Rechenzentrums- und Residential-Proxys zu wechseln. Weitere Details hierzu finden Sie im Abschnitt „Proxys“ unserer Dokumentation.

Fazit

Die Verwendung eines Proxys ist ein wesentlicher Aspekt des Webscrapings, da sie es Ihnen ermöglicht, Ihre IP-Adresse zu verbergen und auf eingeschränkte Websites zuzugreifen. Die HttpClient-Bibliothek von C# ist ein leistungsstarkes Werkzeug zur Datenextraktion, und in Kombination mit einem zuverlässigen Proxy können Sie eine effiziente und schnelle Datenextraktion erreichen.

Durch das Abonnieren eines Premium-Proxy-Dienstes wie WebScrapingAPI erhalten Sie Zugriff auf eine Vielzahl von Funktionen, darunter IP-Rotation und die Möglichkeit, zwischen Datencenter- und Residential-Proxys zu wechseln.

Wir hoffen, dass dieser Artikel Ihnen ein nützliches Verständnis für die Verwendung eines Proxys mit HttpClient vermittelt hat und Ihnen gezeigt hat, wie dies Ihren Scraping-Anforderungen zugute kommen kann. Melden Sie sich gerne für unsere 14-tägige kostenlose Testversion an, um unseren Service zu testen und alle Features und Funktionen zu erkunden.

Über den Autor
Suciu Dan, Mitbegründer @ WebScrapingAPI
Suciu DanMitbegründer

Suciu Dan ist Mitbegründer von WebScrapingAPI und verfasst praxisorientierte, auf Entwickler zugeschnittene Anleitungen zu den Themen Web-Scraping mit Python, Web-Scraping mit Ruby und Proxy-Infrastruktur.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.