Używanie adresu IP proxy w Python Requests
Ustaw jawne trasy proxy dla poszczególnych żądań w Requests, wybierz właściwy schemat punktu końcowego i obsłuż limity czasu oraz błędy tunelu HTTPS.
Gdy Requests jest dostępne w projekcie, przekaż do wywołania mapowanie 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)
Zastąp punkt końcowy pętli zwrotnej działającym proxy lub kandydatem z listy proxy HTTP, którego sprawdzisz tym żądaniem. Klucze określają schematy celu: http dla URL HTTP i https dla URL HTTPS. Wartości opisują punkt nasłuchu proxy. Mogą to być różne punkty, jeśli sieć wymaga osobnych tras.
Wartość proxy z http:// pod kluczem https jest zamierzona. Requests prosi punkt nasłuchu HTTP o tunel CONNECT, a potem zestawia przez niego TLS z celem, zgodnie z zasadami proxy dotyczącymi celów i portów. Zmiana wartości na https:// żąda TLS z samym proxy; może to zawieść, jeśli nasłuch oczekuje nieszyfrowanego HTTP.
Co oznaczają dwie wartości limitu czasu
timeout=(5, 15) ustawia limity czasu połączenia i odczytu. Nie narzuca całkowitego terminu piętnastu sekund. Okresowo napływające dane, wiele adresów i próby połączenia mogą wydłużyć czas działania. Requests nie stosuje ogólnego limitu, gdy pominiesz to ustawienie; wybierz więc wartości odpowiednie do odpowiedzi i dodaj termin na poziomie aplikacji, jeśli zadanie wymaga ścisłego budżetu całkowitego.
Obsługuj błąd na etapie, na którym występuje
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)
Odrzucony CONNECT może wywołać ProxyError, zanim powstanie odpowiedź celu. Gałąź HTTPError następuje po otrzymanej odpowiedzi ze statusem błędu; Timeout oznacza przekroczenie skonfigurowanego limitu. Sprawdzaj lokalnie łańcuchy wyjątków zestawiania połączenia, usuwając punkty z danymi logowania i prywatne URL przed udostępnieniem.
Pozostaw włączoną weryfikację certyfikatów. Jeśli autoryzowana sieć używa prywatnego CA lub zarządzanego przechwytywania, dostarcz oczekiwany materiał zaufania zamiast wyłączać weryfikację.
Jawne wpisy dla żądania kontrolują podane tu trasy, ale pominięte schematy nadal mogą zależeć od wykrywania proxy w środowisku. Przenosząc wywołanie do wielokrotnie używanej Session, ustal współdziałanie zmiennych środowiskowych, ustawień domyślnych Session i nadpisań dla żądania; ponowne użycie połączeń i polityka routingu to osobne decyzje.