Przekaż puste mapowanie do ProxyHandler, gdy jeden opener urllib ma łączyć się bezpośrednio:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Pusty słownik nie określa tras przez proxy. Pominięcie mapowania pozwala natomiast handlerowi wykryć proxy na podstawie środowiska i ustawień platformy. Te dwa sposoby tworzenia wyrażają różne polityki.

Przykład używa standardowej biblioteki Pythona i zachowuje zwykłą weryfikację HTTPS. Blok with zamyka odpowiedź, również gdy wyjątek powoduje wyjście z bloku.

Żądania bezpośrednie i przez proxy w jednej aplikacji

Dwa obiekty opener mogą realizować dwie polityki bez zmieniania zmiennych środowiskowych między wywołaniami:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Zastąp adres pętli zwrotnej swoim proxy HTTP albo wybierz kandydata z listy proxy HTTP do porównania przez proxy. Może ono przenosić połączenie do celu HTTPS przez CONNECT, jeśli usługa na to pozwala. Protokół i obsługa uwierzytelniania nasłuchującej usługi muszą pasować do handlera.

Nie zmieniaj domyślnego opener

Wywołuj direct.open lub proxied.open przez obiekt odpowiedzialny za trasę. install_opener zmienia domyślny obiekt dla całego procesu, którego używają funkcje pomocnicze urllib; korzystająca z niego biblioteka może więc wpłynąć na niepowiązany kod. Dla powyższego odizolowanego opener nie jest potrzebny.

Argument timeout jest ustawieniem operacji, a nie pełnym limitem rzeczywistego czasu każdego transferu. Odczytuj tylko potrzebne dane i użyj terminu na wyższym poziomie, jeśli zadanie ma ścisły całkowity budżet czasu.

Te obiekty opener nie zmieniają klienta innej biblioteki, istniejącego procesu ani ustawień proxy przeglądarki.

Powiązane artykuły