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 კლიენტს.