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.