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 հաճախորդը։