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 می‌تواند جای واسط را بگیرد. مقصد را جداگانه جایگزین کنید. نشانی وب‌سایت هویت TLS خود را حفظ می‌کند. اعتبارنامه‌های احرازشدهٔ پروکسی متعلق به WebProxy است؛ نه اعتبارنامه‌های وب‌سایت و نه تأیید غیرفعال‌شده جای آن‌ها را نمی‌گیرند.

GetStringAsync وضعیت‌های ناموفق HTTP را خطا می‌داند. دانلود ناموفق را به یک HtmlDocument خالی تبدیل نکنید. اگر برنامه به سرآیندها، جزئیات وضعیت یا بدنهٔ خطا نیاز دارد، از یک عملیات HTTP پاسخ‌محور استفاده کنید و پیش از تجزیه آن را بررسی کنید.

روش رشته‌ای از تبدیل اضافی و بی‌قید‌وشرط بایت‌های خام به UTF-8 پرهیز می‌کند. اگر بایت‌ها را عامدانه دریافت می‌کنید، الزامات کدگذاری پاسخ و سند را به رمزگشایی منتقل کنید.

LoadHtml یک سند تجزیه‌شده تولید می‌کند؛ اسکریپت اجرا نمی‌کند، سبک بار نمی‌کند و پیوندها را دنبال نمی‌کند. پیوندهای نسبی بعدی را نسبت به مکان پاسخ حل کنید و به یاد داشته باشید که عناصر رندرشده توسط مرورگر ممکن است در منبع دانلودشده وجود نداشته باشند. هر پاسخ باید سند خودش را تولید کند، حتی وقتی درخواست‌ها همان کلاینت HTTP پیکربندی‌شده را به اشتراک می‌گذارند.

مقالات مرتبط