Proxy in HttpClient mit .NET und C# einrichten

Meistern Sie die C# HttpClient Proxy-Integration mit dieser Schritt-für-Schritt-Anleitung. Lernen Sie Einrichtung, Authentifizierung, SSL-Handling und IP-Rotation für sichere Web-Anfragen.
12 min lesen
How to Set a Proxy Using HttpClient blog image

Am Ende dieses Leitfadens zur HttpClient C# Proxy-Integration wissen Sie:

  • Was HttpClient ist und welche Rolle es bei HTTP-Anfragen in .NET spielt
  • Warum Sie einen Proxy in C# verwenden sollten
  • Wie Sie einen Proxy in HttpClient einrichten
  • Wie Sie Proxy-Authentifizierung, SSL-Zertifikatsfehler und IP-Rotation mit HttpClient handhaben.

Legen wir los!

Was Ist HttpClient in .NET?

HttpClient ist eine Klasse zum Senden von HTTP-Anfragen und Empfangen von HTTP-Antworten in .NET. Sie ist Teil des Namespaces System.Net.Http und stellt den Standard-HTTP-Client in .NET dar – und damit auch in C#.

HttpClient unterstützt:

  • Alle HTTP-Methoden, einschließlich GET, POST, PUT, PATCH und DELETE
  • Asynchrone Kommunikation
  • Anpassung von Headern und Cookies
  • Anpassung des Anfrage-Bodys
  • Proxy-Integration

Diese Funktionen, zusammen mit der offiziellen Unterstützung in der .NET Standard Library, machen HttpClient zu einer beliebten Wahl für HTTP-Anfragen in C#.

Warum Sie einen Proxy in C# HttpClient Einrichten Müssen

Bei Web-Scraping, Datenerfassung oder anderen internetbezogenen Aufgaben ist der Schutz Ihrer Online-Identität entscheidend. Eine Möglichkeit, dies zu erreichen, besteht darin, Ihren Traffic über einen Proxyserver zu leiten.

Ein Proxyserver fungiert als Vermittler zwischen Ihnen und der Zielseite und bietet HttpClient folgende Vorteile:

  • Verborgene IP und Standort: Die Zielserver sehen die IP des Proxys, nicht Ihre eigene.
  • Erhöhte Vertraulichkeit: Proxys fügen eine Schutzschicht hinzu, indem sie Ihre echte Identität verschleiern und es schwieriger machen, Sie zu verfolgen.
  • IP-Sperren vermeiden: Proxys helfen Ihnen, Ratenbegrenzer zu umgehen, was beim Web-Scraping mit C# grundlegend ist.
  • Geo-Beschränkungen umgehen: Sie können Proxyserver in bestimmten Regionen nutzen, um geobeschränkte Inhalte von zu Hause aus zu erreichen.

Die Verwendung von Proxys in HttpClient erhöht somit nicht nur Ihre Online-Sicherheit, sondern verbessert auch die Zuverlässigkeit Ihrer Scraping-Aufgaben.

Einen Proxy mit HttpClient in C# Einrichten: Schritt-für-Schritt-Anleitung

Folgen Sie den untenstehenden Schritten, um zu lernen, wie Sie einen Proxy in HttpClient in .NET mit C# integrieren.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

  • Eine C#-IDE: Sie können entweder Visual Studio oder Visual Studio Code verwenden. In diesem Leitfaden verwenden wir Visual Studio Code mit der C#-Erweiterung.
  • .NET 8+ lokal installiert: Sie benötigen die neueste Version von .NET oder eine LTS-Version größer oder gleich .NET 8. In diesem Tutorial verwenden wir .NET 9.

Falls Sie die erforderlichen Tools nicht haben, laden Sie sie über den obigen Link herunter und folgen Sie dem Installationsassistenten.

Schritt 1: Projekt Einrichten

Erstellen Sie einen neuen Ordner für Ihr .NET-Projekt und navigieren Sie im Terminal mit den folgenden Befehlen dorthin:

mkdir httpclient-proxy
cd httpclient-proxy

Initialisieren Sie als Nächstes eine neue .NET-Konsolenanwendung darin:

dotnet run console

Die Ausgabe sollte lauten:

The template "Console App" was created successfully.

Öffnen Sie nun den Projektordner in Ihrer IDE:

Program.cs in your C# Project

Sie sollten die vom Template erzeugten Dateien sehen, wobei Program.cs die wichtigste ist. Derzeit enthält sie ein einfaches “Hello, World!”-Skript. Am Ende dieses Abschnitts wird daraus ein HttpClient C# Proxy-Integrationsskript.

Um sicherzustellen, dass alles wie erwartet funktioniert, versuchen Sie, die C#-Anwendung zu starten mit:

dotnet run

Das Ergebnis sollte sein:

Hello, World!

Großartig! Sie haben nun ein funktionierendes C#-Projekt in Visual Studio Code.

Schritt 2: HttpClient Einrichten

Fügen Sie die folgenden Codezeilen zu Program.cs hinzu, um eine Anfrage mit HttpClient zu senden:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize an HttpClient instance
    using HttpClient client = new HttpClient();

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Das Snippet initialisiert eine HttpClient-Instanz und verwendet ihre GetAsync()-Methode, um sich mit dem /ip GET-Endpunkt des HTTPBin.io-Projekts zu verbinden. Diese API gibt die IP-Adresse des Aufrufers zurück, was sie zu einem perfekten Ziel macht, um zu überprüfen, ob die Proxy-Integration wie erwartet funktioniert. Der Grund? Sobald Sie einen Proxy in HttpClient integrieren, muss die vom /ip-Endpunkt zurückgegebene IP von Ihrer ursprünglichen IP abweichen.

Wenn Sie das Skript ausführen, sollte die Ausgabe etwa so aussehen:

{
  "origin": "55.17.80.196"
}

Die in origin enthaltene IP-Adresse stellt Ihre ausgehende IP dar.

Hervorragend! Zeit, eine gültige Proxy-URL zu besorgen.

Schritt 3: Einen Proxy Besorgen

Um einen Proxy in HttpClient zu integrieren, benötigen Sie zunächst Zugriff auf einen Proxyserver.

Viele Online-Portale bieten kostenlose Proxy-URLs an, aber seien Sie vorsichtig – der Betrieb einer Proxy-Infrastruktur ist teuer. Wenn ein Dienst kostenlose Proxys anbietet, überlegen Sie, wie dessen Geschäftsmodell aussehen könnte. Oft betreiben diese Dienste Datendiebstahl oder andere fragwürdige Praktiken.

Aus diesem Grund ist es am besten, kostenlose Proxys nur zu Lernzwecken zu verwenden und sie nicht im produktiven Einsatz zu nutzen!

Wenn Sie zuverlässige Proxys benötigen, sollten Sie seriöse Anbieter in Betracht ziehen, die kostenlose Testversionen oder begrenzte kostenlose Pläne anbieten.

Eine typische Proxy-URL folgt diesem Format:

<protocol>://<host>:<port>

Dabei gilt:

  • protocol gibt den Proxy-Typ an (z. B. http, https, socks5 usw.)
  • host: Die Domain oder IP-Adresse des Proxyservers
  • port: Die Portnummer, über die der Traffic geleitet wird

In diesem Beispiel gehen wir davon aus, dass die Proxy-URL lautet:

http://66.29.154.103:3128

Speichern Sie dies in einer Variable in Program.cs:

string proxyUrl = "http://66.29.154.103:3128";

Zeit, zu sehen, wie man einen Proxy mit HttpClient verwendet!

Schritt 4: Proxy-Integration

HttpClient ermöglicht es Ihnen, einen Proxy über die Klasse HttpClientHandler anzugeben. Diese bietet eine Low-Level-Kontrolle über die von einer HttpClient-Instanz gesendeten HTTP-Anfragen.

Im Besonderen hat HttpClientHandler eine Proxy-Eigenschaft, die ein WebProxy-Objekt mit den Proxyserver-Einstellungen akzeptiert:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
};

Übergeben Sie dann proxy an eine HttpClientHandler-Instanz:

HttpClientHandler handler = new HttpClientHandler
{
    Proxy = proxy,
};

Und schließlich übergeben Sie HttpClientHandler an den HttpClient-Konstruktor:

using HttpClient client = new HttpClient(handler);

Wunderbar! HttpClient C# Proxy-Integration abgeschlossen.

Schritt 5: Alles Zusammenfügen

Ihr fertiges HttpClient-Proxy-Integrationsskript sollte Folgendes enthalten:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "http://66.29.154.103:3128"; // replace with a valid proxy URL
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Führen Sie das Skript aus:

dotnet run

Das Ergebnis sollte sein:

{
  "origin": "66.29.154.103"
}

Beachten Sie, dass das origin-Attribut in der Antwort des /ip-Endpunkts die IP-Adresse des Proxyservers anzeigt. Dies bestätigt, dass Ihre echte IP erfolgreich hinter dem Proxy verborgen wurde.

Warnung: Kostenlose Proxyserver sind in der Regel kurzlebig und unzuverlässig. Wenn Sie diesen Leitfaden lesen, wird der gewählte Proxy wahrscheinlich nicht mehr funktionieren. Um den Code zu testen, ersetzen Sie proxyUrl durch eine gültige, funktionierende Proxy-URL, bevor Sie das Skript ausführen.

Fortgeschrittene Anwendungsfälle für die HttpClient-Proxy-Integration

Sie haben gerade die Grundlagen der Proxy-Integration mit HttpClient in C# kennengelernt, aber es gibt weitere, fortgeschrittenere Szenarien zu beachten.

Proxy-Authentifizierung

Premium-Proxys sind durch Authentifizierung geschützt, um den Zugriff auf autorisierte Benutzer zu beschränken. Konkret folgt die URL eines authentifizierten Proxys diesem Format:

<protocol>://<username>:<password>@<host>:<port>

Dabei sind username und password die für die Authentifizierung verwendeten Anmeldedaten.

In HttpClient wird die Proxy-Authentifizierung über die Credentials-Eigenschaft von WebProxy gehandhabt. Diese Eigenschaft akzeptiert ein NetworkCredential-Objekt wie folgt:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
  // specify proxy authentication
  Credentials = new NetworkCredential("<username>", "<password>"),
};

Extrahieren Sie <username> und <password> aus Ihrer authentifizierten Proxy-URL und ersetzen Sie sie im obigen Code.

Der Code für die authentifizierte Proxy-Integration sieht also so aus:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "<protocol>://<host>:<port>";
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
      // specify proxy authentication
      Credentials = new NetworkCredential("<username>", "<password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with authenticated proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

SSL-Zertifikatsprobleme Vermeiden

Beim Einrichten eines Proxys in HttpClient können Ihre Anfragen aufgrund des folgenden SSL-Zertifikatsüberprüfungsfehlers fehlschlagen:

Unhandled exception. System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot

Dies geschieht typischerweise, wenn der Proxy ein selbstsigniertes SSL-Zertifikat verwendet.

Wenn Sie Ihrem Proxyserver vertrauen – und nur in diesem Fall – können Sie die SSL-Überprüfung mit folgendem Ansatz deaktivieren, um dieses Problem zu umgehen:

HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
{
  return true;
};

using HttpClient client = new HttpClient(handler);

Das obige Snippet überschreibt das Standardverhalten der Zertifikatsvalidierung mit einem benutzerdefinierten Callback, der immer true zurückgibt.

Hinweis: Das Deaktivieren der SSL-Überprüfung macht Ihre Verbindung anfällig für MITM (Man-in-the-Middle)-Angriffe. Verwenden Sie diesen Ansatz nur, wenn Sie Ihrem Proxy vollständig vertrauen und sich der Sicherheitsrisiken bewusst sind.

Proxy-Rotation Implementieren

Wenn Sie sich wiederholt auf denselben Proxyserver verlassen, könnte die Zielseite irgendwann dessen IP-Adresse sperren. Um dies zu vermeiden, können Sie Ihre Proxyserver für jede Anfrage rotieren, sodass Ihre Anfragen jedes Mal einen anderen Proxyserver verwenden.

Um die Proxy-Rotation zu implementieren, folgen Sie diesem Verfahren

  1. Füllen Sie eine Liste mit vielen Proxy-URLs
  2. Wählen Sie vor jeder Anfrage zufällig eine Proxy-URL aus
  3. Legen Sie die gewählte Proxy-URL in HttpClient fest

Der obige Algorithmus ergibt folgendes Snippet:

using System.Net;

class Program
{  
  static async Task Main()
  {
    // get a random proxy URL
    string selectedProxyUrl = GetRandomProxyUrl();

    // configure the random proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = new WebProxy
      {
        Address = new Uri(selectedProxyUrl),
      },
    };

    // perform a GET request through the random proxy
    using HttpClient client = new HttpClient(handler);
    string url = "https://httpbin.org/ip";
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string and print it
    string responseBody = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseBody);
  }

  static string GetRandomProxyUrl()
  {
    // the list of proxy URL to rotate from
    List<string> proxyUrls = new List<string>
        {
            "<protocol_1>://<proxy_host_1>:<port_1>",
            // ...
            "<protocol_n>://<proxy_host_n>:<port_n>",
        };

    // return a random proxy URL from the list
    Random random = new Random();
    int index = random.Next(proxyUrls.Count);
    return proxyUrls[index];
  }
}

Die Hauptnachteile dieses Ansatzes sind:

  • Er erfordert Boilerplate-Code
  • Er erfordert Zugriff auf einen Pool zuverlässiger Proxyserver, was in der Regel Kosten verursacht

Glücklicherweise gibt es eine effizientere Lösung, um eine IP-Adresse in C# zu rotieren!

Bright Data bietet rotierende Proxys, die die ausgehenden IP-Adressen automatisch rotieren und so die manuelle Proxy-Rotation überflüssig machen. Sie verfügen über rund 100 Millionen IPs, sind in 195 Ländern verfügbar, bieten eine außergewöhnliche Netzwerkverfügbarkeit und garantieren eine Erfolgsquote von 99,9 %.

Im nächsten Kapitel erfahren Sie, wie Sie mit den rotierenden Proxys von Bright Data in HttpClient beginnen können.

Einen Bright Data Proxy in HttpClient Verwenden

Bright Data betreibt einen der größten Proxyserver der Welt und bedient Fortune-500-Unternehmen sowie 50,000+ Kunden. Dieses weltweite Proxy-Netzwerk umfasst:

Folgen Sie den untenstehenden Schritten, um zu lernen, wie Sie die Residential-Proxys von Bright Data mit HttpClient in C# verwenden.

Wenn Sie bereits ein Konto haben, melden Sie sich bei Bright Data an. Falls nicht, erstellen Sie ein Konto, und nach der Anmeldung werden Sie zu Ihrem Benutzer-Dashboard weitergeleitet:

Bright Data's dashboard after login

Klicken Sie auf die Schaltfläche “View proxy products”, um fortzufahren:

Clicking on view proxy products

Sie werden zur Seite “Proxies & Scraping Infrastructure” weitergeleitet:

Proxies & Scraping Infrastructure main page

Scrollen Sie nach unten und suchen Sie die Karte “Residential Proxies”. Klicken Sie auf die Schaltfläche “Get started”:

Getting started with residential proxies

Folgen Sie auf der Konfigurationsseite für Residential-Proxys dem Assistenten, um den Dienst nach Ihren Bedürfnissen anzupassen. Bei Fragen können Sie sich gerne an den 24/7-Support wenden:

Customizing the service based on your needs

Gehen Sie zum Tab “Access parameters”, um Host, Port, Benutzername und Passwort Ihres Proxys abzurufen:

The access parameters for your new zone

Beachten Sie, dass das Feld “Host” den Port enthält.

Jetzt, da Sie die nötigen Details haben, erstellen Sie Ihre Proxy-URL und verwenden Sie sie mit dem WebProxy-Objekt in C#:

WebProxy proxy = new WebProxy
{
  Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
  Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
};

Ersetzen Sie die Platzhalter <...> durch die Proxy-Informationen von Bright Data.

Aktivieren Sie die Einstellung “Active proxy”, folgen Sie den verbleibenden Anweisungen, und schon sind Sie startklar!

Verwenden Sie das folgende C#-Codebeispiel, um den Proxy von Bright Data in HttpClient zu integrieren:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    WebProxy proxy = new WebProxy
    {
      // TODO: replace the placeholders with your Bright Data's proxy info
      Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
      Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // disable SSL verification
    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
    handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
    {
      return true;
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

Jedes Mal, wenn Sie das obige Skript ausführen, sehen Sie eine andere ausgehende IP.

HttpClient-Proxy-Rotation war mit den automatisch rotierenden Proxys von Bright Data noch nie so einfach!

Fazit

In diesem Tutorial zur Proxy-Integration haben Sie gelernt, warum die Verwendung von Proxys wichtig ist und wie Sie sie mit HttpClient in C# integrieren. Sie haben entdeckt, wie einfach es ist, einen Proxy in HttpClient, der Standard-HTTP-Clientbibliothek in .NET, einzurichten.

Durch diesen Leitfaden haben Sie außerdem verstanden, warum das Verlassen auf kostenlose Proxy-Dienste riskant ist. Stattdessen sollten Sie zuverlässige Proxys von einem seriösen Proxy-Anbieter verwenden. Und wenn es um den besten Anbieter für rotierende Proxys auf dem Markt geht, müssen Sie nicht weiter suchen als Bright Data.

Erstellen Sie ein Konto und testen Sie unsere Proxys noch heute kostenlos!