Python urllib: βασικός έλεγχος ταυτότητας διαμεσολαβητή για αιτήματα HTTP
Κατασκευάστε έναν ρητό opener urllib για πρόκληση Basic από διαμεσολαβητή HTTP και διακρίνετε αυτή τη συνήθη ανταλλαγή HTTP από τον έλεγχο ταυτότητας HTTPS CONNECT.
Για πρόκληση Basic από διαμεσολαβητή HTTP, χρησιμοποιήστε ProxyBasicAuthHandler. Αυτό το συνήθες παράδειγμα HTTP κρατά τη διαδρομή και τον λογαριασμό σε έναν opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Χρησιμοποιήστε το πραγματικό τελικό σημείο και τον λογαριασμό που παρέχει ο διαχειριστής. Ο χειριστής χρησιμοποιεί τον διαχειριστή κωδικών για την πρόκληση του διαμεσολαβητή· ταιριάξτε το προβλεπόμενο URI και realm του διαμεσολαβητή. Ο έλεγχος ταυτότητας Basic στον προορισμό χρησιμοποιεί άλλον χειριστή.
Η άμεση κλήση του opener κρατά αυτή τη ρύθμιση τοπική. Το URL του αιτήματος παραμένει ο ιστότοπος, όχι ο μεσάζων. Αυτή η απλή διαδρομή HTTP δεν κρυπτογραφεί μια ανταλλαγή Basic.
Μην συμπεράνετε υποστήριξη σήραγγας HTTPS από αυτό το παράδειγμα. Ένα 407 κατά το CONNECT συμβαίνει στη ρύθμιση, πριν από μια συνήθη απόκριση προορισμού· η επιλεγμένη ενσωμάτωση πρέπει να χειρίζεται εκεί τον έλεγχο ταυτότητας. Η αλλαγή του χειριστή σύνδεσης του ιστότοπου δεν μπορεί να διορθώσει εκείνη την προγενέστερη πρόκληση.
Τα URL διαμεσολαβητή που φέρουν διαπιστευτήρια είναι άλλη μορφή που απαντά σε παλαιότερα παραδείγματα. Αν χρησιμοποιηθούν, κωδικοποιήστε σωστά τους διαχωριστές του URL και κρατήστε το URL που φέρει μυστικό έξω από τα αρχεία καταγραφής.