Χρήση IP proxy στο Python Requests
Ορίστε ρητές διαδρομές proxy ανά αίτημα στο Requests, επιλέξτε το σωστό σχήμα τελικού σημείου και χειριστείτε χρονικά όρια και αποτυχίες σήραγγας HTTPS.
Όταν το Requests είναι διαθέσιμο στο έργο σας, περάστε μια αντιστοίχιση proxy στην κλήση:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
Αντικαταστήστε το τελικό σημείο loopback με τον ενεργό proxy σας ή έναν υποψήφιο από τη λίστα HTTP proxy που θα δοκιμάσετε με αυτό το αίτημα. Τα κλειδιά περιγράφουν σχήματα προορισμού: http για URL HTTP και https για URL HTTPS. Οι τιμές περιγράφουν το σημείο ακρόασης του proxy. Μπορεί να είναι διαφορετικά σημεία αν το δίκτυο απαιτεί χωριστές διαδρομές.
Μια τιμή proxy http:// κάτω από το κλειδί https είναι σκόπιμη. Το Requests ζητά σήραγγα CONNECT από το σημείο ακρόασης HTTP και μετά δημιουργεί μέσω αυτής TLS προς τον προορισμό, σύμφωνα με την πολιτική προορισμών και θυρών του proxy. Η αλλαγή σε https:// ζητά TLS προς τον ίδιο τον proxy· μπορεί να αποτύχει αν το σημείο ακρόασης περιμένει μη κρυπτογραφημένο HTTP.
Τι σημαίνουν οι δύο αριθμοί χρονικού ορίου
Το timeout=(5, 15) θέτει όρια σύνδεσης και ανάγνωσης. Δεν επιβάλλει συνολική προθεσμία δεκαπέντε δευτερολέπτων. Περιοδικά εισερχόμενα δεδομένα, πολλές διευθύνσεις και προσπάθειες σύνδεσης μπορούν να παρατείνουν τον χρόνο. Το Requests δεν παρέχει γενικό χρονικό όριο αν παραλείψετε τη ρύθμιση. Επιλέξτε όρια κατάλληλα για την απόκριση και προσθέστε προθεσμία στην εφαρμογή αν απαιτείται αυστηρός συνολικός χρόνος.
Χειριστείτε την αποτυχία στο στάδιο όπου εμφανίζεται
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
Ένα απορριφθέν CONNECT μπορεί να προκαλέσει ProxyError πριν υπάρξει απόκριση προορισμού. Ο κλάδος HTTPError ακολουθεί ληφθείσα απόκριση με κατάσταση σφάλματος· το Timeout σημαίνει ότι έληξε ένα ρυθμισμένο όριο. Εξετάστε τοπικά τις αλυσίδες εξαιρέσεων δημιουργίας σύνδεσης, αφαιρώντας τελικά σημεία με διαπιστευτήρια και ιδιωτικά URL πριν τα κοινοποιήσετε.
Αφήστε ενεργή την επαλήθευση πιστοποιητικών. Αν το εξουσιοδοτημένο δίκτυο χρησιμοποιεί ιδιωτική CA ή διαχειριζόμενη υποκλοπή, δώστε το αναμενόμενο υλικό εμπιστοσύνης αντί να απενεργοποιήσετε την επαλήθευση.
Οι ρητές εγγραφές ανά αίτημα ελέγχουν τις διαδρομές που δίνονται εδώ, αλλά τα σχήματα που παραλείπονται μπορεί ακόμη να επηρεάζονται από την ανίχνευση proxy του περιβάλλοντος. Μεταφέροντας την κλήση σε επαναχρησιμοποιήσιμο Session, αποφασίστε πώς θα αλληλεπιδρούν μεταβλητές περιβάλλοντος, προεπιλογές Session και παρακάμψεις ανά αίτημα· επαναχρησιμοποίηση σύνδεσης και πολιτική δρομολόγησης είναι ξεχωριστές επιλογές.