using var handler = new HttpClientHandler
{
    UseProxy = true,
    Proxy = new WebProxy("http://proxy.example:8080")
};
using var client = new HttpClient(handler);

string html = await client.GetStringAsync(
    "https://www.example.com/catalog");
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

Dieses moderne .NET-Fragment nutzt System.Net und System.Net.Http. Der konfigurierte Client übernimmt das Netzwerk-Routing, und Html Agility Pack erhält den zurückgegebenen HTML-String. Behalten Sie einen passend konfigurierten Client für laufende Arbeit bei, statt seine Pools für jede Seite neu aufzubauen.

Für dieses Beispiel einer öffentlichen Seite kann ein nicht authentifizierter Kandidat aus der HTTP-Proxy-Liste den Vermittler ersetzen. Ersetzen Sie das Ziel separat. Die Website-URL behält ihre TLS-Identität. Authentifizierte Proxy-Anmeldedaten gehören an WebProxy; weder Website-Anmeldedaten noch deaktivierte Prüfung ersetzen sie.

GetStringAsync behandelt HTTP-Status, die kein Erfolg sind, als Fehler. Wandeln Sie einen fehlgeschlagenen Download nicht in ein leeres HtmlDocument um. Wenn die Anwendung Header, Statusdetails oder einen Fehlerkörper braucht, verwenden Sie eine antwortorientierte HTTP-Operation und prüfen Sie sie vor dem Parsen.

Die String-Methode vermeidet eine bedingungslose zusätzliche UTF-8-Konvertierung roher Bytes. Wenn Sie Bytes bewusst abrufen, tragen Sie die Anforderungen an die Antwort- und Dokumentkodierung in das Dekodieren.

LoadHtml erzeugt ein geparstes Dokument; es führt keine Skripte aus, lädt keine Styles und folgt keinen Links. Lösen Sie nachfolgende relative Links gegen die Position der Antwort auf, und bedenken Sie, dass vom Browser gerenderte Elemente im heruntergeladenen Quelltext fehlen können. Jede Antwort sollte ihr eigenes Dokument erzeugen, auch wenn Anfragen denselben konfigurierten HTTP-Client teilen.

Ähnliche Artikel