Html Agility Pack দিয়ে বিশ্লেষণের আগে প্রক্সির মাধ্যমে HTML আনুন
প্রক্সি-কনফিগার করা 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 ক্লায়েন্ট ভাগ করলেও প্রতিটি প্রতিক্রিয়ার নিজস্ব নথি তৈরি করা উচিত।