Η απόκριση του Requests φαίνεται παραμορφωμένη πίσω από διακομιστή μεσολάβησης; Ελέγξτε την υποστήριξη Brotli
Ένα αντιγραμμένο Accept-Encoding:br μπορεί να ξεπεράσει την υποστήριξη αποκωδικοποιητή του φιλοξενούμενου περιβάλλοντος Requests.
Συγκρίνετε τον φορητό υπολογιστή και τη φιλοξενούμενη διεργασία σε δύο διαφορετικά επίπεδα:
| Επίπεδο | Ερώτηση |
|---|---|
| Content-Encoding | Μπορεί ο πελάτης να αποσυμπιέσει τα επιστρεφόμενα byte gzip/deflate/Brotli; |
| Charset | Πώς τα αποσυμπιεσμένα byte γίνονται κείμενο; |
Το Requests χειρίζεται συνήθως gzip/deflate· το Brotli απαιτεί υποστηριζόμενη εγκατεστημένη βιβλιοθήκη. Ένα χειροκίνητα αντιγραμμένο Accept-Encoding μπορεί να διαφημίζει br ενώ αυτό το περιβάλλον δεν μπορεί να το αποκωδικοποιήσει. Η επιλογή κειμένου UTF-8 δεν αποσυμπιέζει το Brotli.
Όταν περιορίζετε σκόπιμα τη διαπραγμάτευση:
response = session.get(
url,
proxies={"https": "http://proxy.example:8080"},
headers={"Accept-Encoding": "gzip, deflate"},
timeout=30,
)
response.raise_for_status()Χρησιμοποιήστε το υπάρχον Session, τη διεύθυνση HTTPS και τις απαιτούμενες κεφαλίδες/έλεγχο ταυτότητας. Συγκρίνετε το εξερχόμενο Accept-Encoding, το εισερχόμενο Content-Encoding και την υποστήριξη πακέτων και στα δύο μηχανήματα· ένας μετασχηματιστικός μεσάζων μπορεί επίσης να παρέχει παρωχημένα μεταδεδομένα. Μια ξεχωριστή σύγκριση δημόσιας σελίδας μπορεί να χρησιμοποιήσει το Λίστα διακομιστών μεσολάβησης HTTP για τη διεύθυνση μεσολάβησης όπου επιτρέπονται δημόσιοι μεσάζοντες, χωρίς κληρονομημένα διαπιστευτήρια μεσολάβησης, αντιγραμμένες κεφαλίδες λογαριασμού ή ιδιωτικά δεδομένα σώματος.
Κατά τα λοιπά προτιμήστε την κανονική διαπραγμάτευση του πελάτη. Οι βολικές διεπαφές content/text του Requests αποκωδικοποιούν την υποστηριζόμενη κωδικοποίηση, οπότε μην αποσυμπιέζετε ξανά την έξοδό τους μόνο επειδή την ονομάζει η κεφαλίδα.