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 ਕਲਾਇੰਟ ਸਾਂਝਾ ਕਰਦੀਆਂ ਹੋਣ ਤਾਂ ਵੀ ਹਰ ਪ੍ਰਤੀਕਿਰਿਆ ਨੂੰ ਆਪਣਾ ਦਸਤਾਵੇਜ਼ ਪੈਦਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।