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 क्लाइंट साझा करें तब भी प्रत्येक प्रतिक्रिया को अपना दस्तावेज़ बनाना चाहिए।

संबंधित लेख