שליפת 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 יכול להחליף את המתווך. החליפו את היעד בנפרד. כתובת האתר שומרת על זהות ה-TLS שלה. פרטי אימות של פרוקסי מאומת שייכים ל-WebProxy; לא פרטי האתר ולא אימות מושבת מחליפים אותם.
GetStringAsync מתייחס לסטטוסי HTTP שאינם מוצלחים כשגיאות. אל תמירו הורדה כושלת ל-HtmlDocument ריק. אם היישום זקוק לכותרים, לפרטי סטטוס או לגוף שגיאה, השתמשו בפעולת HTTP מכוונת תגובה ובחנו אותה לפני הניתוח.
שיטת המחרוזת נמנעת מהמרת UTF-8 מיותרת וחסרת תנאי של בייטים גולמיים. אם אתם שולפים בייטים במכוון, העבירו את דרישות הקידוד של התגובה והמסמך אל הפענוח.
LoadHtml מפיק מסמך מנותח; הוא אינו מריץ סקריפטים, אינו טוען עיצובים ואינו עוקב אחר קישורים. פתרו קישורים יחסיים עוקבים ביחס למיקום התגובה, וזכרו שייתכן שרכיבים שמציג הדפדפן חסרים במקור שהורד. כל תגובה אמורה להפיק מסמך משלה גם כאשר בקשות חולקות אותו לקוח HTTP מוגדר.