HTML gavimas per tarpinį serverį prieš analizuojant su Html Agility Pack
Sujunkite per tarpinį serverį sukonfigūruotą HttpClient su Html Agility Pack ir atskirkite tinklo klaidas nuo HTML analizės.
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);Šis modernus .NET fragmentas naudoja System.Net ir System.Net.Http. Sukonfigūruotas klientas valdo tinklo maršrutizavimą, o Html Agility Pack gauna grąžintą HTML eilutę. Išsaugokite tinkamai sukonfigūruotą klientą nuolatiniam darbui, o ne kiekvienam puslapiui iš naujo kurdami jo telkinius.
Šiame viešo puslapio pavyzdyje neautentifikuotas kandidatas iš HTTP tarpinių serverių sąrašo gali pakeisti tarpininką. Pakeiskite tikslą atskirai. Svetainės URL išlaiko savo TLS tapatumą. Autentifikuoti tarpinio serverio duomenys priklauso WebProxy; jų nepakeičia nei svetainės duomenys, nei išjungtas tikrinimas.
GetStringAsync nesėkmingus HTTP būsenos kodus laiko klaidomis. Nekeiskite nepavykusio atsisiuntimo į tuščią HtmlDocument. Jei programai reikia antraščių, būsenos informacijos ar klaidos turinio, naudokite į atsakymą orientuotą HTTP operaciją ir patikrinkite ją prieš analizę.
Eilutės metodas išvengia besąlyginio papildomo neapdorotų baitų konvertavimo į UTF-8. Jei sąmoningai gaunate baitus, perkelkite atsakymo ir dokumento koduotės reikalavimus į dekodavimą.
LoadHtml sukuria išanalizuotą dokumentą; jis nevykdo scenarijų, nekrauna stilių ir neseka nuorodų. Išspręskite vėlesnes santykines nuorodas atsakymo vietos atžvilgiu ir atminkite, kad naršyklės atvaizduojamų elementų gali nebūti atsisiųstame šaltinyje. Kiekvienas atsakymas turėtų sukurti savo dokumentą, net kai užklausos naudoja tą patį sukonfigūruotą HTTP klientą.