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-кліент.

Падобныя артыкулы