Отримання HTML через проксі перед розбором за допомогою Html Agility Pack
Поєднайте HttpClient, налаштований через проксі, з Html Agility Pack, відокремлюючи мережеві помилки від розбору HTML.
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);Цей сучасний фрагмент .NET використовує System.Net і System.Net.Http. Налаштований клієнт керує мережевою маршрутизацією, а Html Agility Pack отримує повернутий рядок HTML. Зберігайте належно налаштований клієнт для поточної роботи, замість того щоб перебудовувати його пули для кожної сторінки.
Для цього прикладу публічної сторінки неавтентифікований кандидат зі списку HTTP-проксі може замінити посередника. Замініть призначення окремо. URL сайту зберігає свою ідентичність TLS. Автентифіковані облікові дані проксі належать WebProxy; ні облікові дані сайту, ні вимкнена перевірка їх не замінюють.
GetStringAsync розглядає неуспішні статуси HTTP як помилки. Не перетворюйте невдале завантаження на порожній HtmlDocument. Якщо застосунку потрібні заголовки, відомості про статус або тіло помилки, використовуйте HTTP-операцію, орієнтовану на відповідь, і перегляньте її перед розбором.
Рядковий метод уникає безумовного додаткового перетворення необроблених байтів у UTF-8. Якщо ви навмисно отримуєте байти, перенесіть вимоги до кодування відповіді й документа в декодування.
LoadHtml створює розібраний документ; він не виконує скриптів, не завантажує стилів і не переходить за посиланнями. Розв'язуйте наступні відносні посилання щодо розташування відповіді та пам'ятайте, що елементи, які відображає браузер, можуть бути відсутні у завантаженому джерелі. Кожна відповідь має створювати власний документ, навіть коли запити використовують той самий налаштований HTTP-клієнт.