Μια απόκριση που λαμβάνεται μέσω proxy μπορεί να επιστρέψει σχετική Location:

Location: ../new/

Το σύγχρονο HTTP επιτρέπει εδώ αναφορά URI. Επιλύστε την ως προς το URL που παρήγαγε την απόκριση. Αν αυτό το URL ήταν https://docs.example/catalog/old/, η παραπάνω αναφορά προσδιορίζει https://docs.example/catalog/new/. Το όνομα κεντρικού υπολογιστή του proxy δεν είναι η βάση.

Για συνηθισμένα αιτήματα Python urllib, χρησιμοποιήστε τον χειριστή ανακατευθύνσεων αντί να συνενώνετε συμβολοσειρές γύρω από το τελικό σημείο του proxy:

opener = build_opener(ProxyHandler({
    "https": "http://proxy.example:8080",
}))
with opener.open("https://docs.example/catalog/old/",
                 timeout=15) as response:
    final_url = response.geturl()

Για αυτό το αίτημα δημόσιου εγγράφου χωρίς έλεγχο ταυτότητας proxy, ένας υποψήφιος HTTP από τη λίστα proxy HTTP μπορεί να αντικαταστήσει το παράδειγμα τελικού σημείου όταν η διαδρομή επιτρέπεται. Οι κλάσεις προέρχονται από το urllib.request. Ο κανονικός χειριστής του ακολουθεί υποστηριζόμενες ανακατευθύνσεις εντός των ορίων του. Το final_url περιγράφει το τελικό URL του πόρου, όχι τον ενδιάμεσο που χρησιμοποιήθηκε για να φτάσετε σε αυτό.

Επιλύστε πρώτα, μετά επιλέξτε την επόμενη διαδρομή

Μια ανακατεύθυνση μπορεί να αλλάξει τον κεντρικό υπολογιστή ή το σχήμα προορισμού. Επομένως μια πολιτική proxy βασισμένη στον προορισμό πρέπει να αξιολογεί και αυτό το νέο URL. Μια διαδρομή που λειτούργησε για τον πρώτο κεντρικό υπολογιστή μπορεί να μην είναι η διαδρομή για τον επόμενο.

Όταν υλοποιείτε μόνοι σας τον χειρισμό ανακατευθύνσεων, χρησιμοποιήστε επίλυση αναφοράς URI με χειρισμό τμημάτων τελείας. Διατηρήστε τους κανόνες μεθόδου του πραγματικού κωδικού κατάστασης και επιβάλετε όριο ανακατευθύνσεων. Η προσάρτηση του Location σε όνομα κεντρικού υπολογιστή δεν υποκαθιστά αυτόν τον αλγόριθμο επίλυσης.

Αν μια ανακατεύθυνση αποτύχει, κρατήστε το ζητούμενο URL, την κατάσταση απόκρισης, την τιμή Location και το επιλυμένο επόμενο URL. Αυτές οι τέσσερις τιμές συνήθως δείχνουν αν η αποτυχία ανήκει στην κατασκευή του URL ή στη σύνδεση που επιχειρήθηκε μετά.

Σχετικά άρθρα