Λήψη HTML μέσω διαμεσολαβητή πριν από την ανάλυση με το Html Agility Pack
Συνδυάστε ένα 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 προσανατολισμένη στην απόκριση και ελέγξτε την πριν από την ανάλυση.
Η μέθοδος συμβολοσειράς αποφεύγει μια άνευ όρων πρόσθετη μετατροπή ακατέργαστων byte σε UTF-8. Αν λαμβάνετε byte σκόπιμα, μεταφέρετε τις απαιτήσεις κωδικοποίησης απόκρισης και εγγράφου στην αποκωδικοποίηση.
Το LoadHtml παράγει ένα αναλυμένο έγγραφο· δεν εκτελεί σενάρια, δεν φορτώνει στυλ ούτε ακολουθεί συνδέσμους. Επιλύστε τους επόμενους σχετικούς συνδέσμους ως προς τη θέση της απόκρισης και θυμηθείτε ότι στοιχεία που αποδίδει ο περιηγητής μπορεί να λείπουν από τον ληφθέντα κώδικα. Κάθε απόκριση πρέπει να παράγει το δικό της έγγραφο ακόμη και όταν τα αιτήματα μοιράζονται τον ίδιο ρυθμισμένο πελάτη HTTP.