Použití IP adresy proxy v Python Requests
Nastavte v Requests explicitní trasy proxy pro jednotlivé požadavky, vyberte správné schéma koncového bodu a ošetřete timeouty a selhání tunelu HTTPS.
Když je Requests v projektu dostupné, předejte volání mapování 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)
Nahraďte koncový bod zpětné smyčky svou běžící proxy nebo kandidátem ze seznamu HTTP proxy, kterého tímto požadavkem otestujete. Klíče popisují schémata cíle: http pro HTTP URL a https pro HTTPS URL. Hodnoty popisují naslouchající rozhraní proxy. Pokud síť vyžaduje oddělené trasy, mohou to být různé koncové body.
Hodnota proxy http:// pod klíčem https je záměrná. Requests požádá HTTP rozhraní o tunel CONNECT a pak přes něj naváže TLS s cílem, podle pravidel proxy pro cíle a porty. Změna na https:// požaduje TLS k samotné proxy; pokud rozhraní očekává nešifrované HTTP, může selhat.
Co znamenají dvě hodnoty timeoutu
timeout=(5, 15) nastavuje timeout připojení a čtení. Nestanovuje celkovou patnáctisekundovou lhůtu. Pravidelně přicházející data, více adres a pokusy o připojení mohou celkovou dobu prodloužit. Při vynechání nastavení Requests neposkytuje obecný timeout; zvolte proto limity odpovídající odpovědi a přidejte lhůtu na úrovni aplikace, pokud úloha potřebuje přísný celkový časový rozpočet.
Ošetřete selhání ve fázi, ve které nastane
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)
Odmítnutý CONNECT může vyvolat ProxyError ještě před vznikem odpovědi cíle. Větev HTTPError následuje po přijaté odpovědi s chybovým stavem; Timeout znamená vypršení nastaveného limitu. Řetězce výjimek navazování spojení zkoumejte místně a před sdílením odstraňte koncové body s přihlašovacími údaji a soukromé URL.
Ponechte ověřování certifikátů zapnuté. Pokud autorizovaná síť používá soukromou CA nebo spravované zachytávání provozu, dodejte očekávaný materiál důvěry místo vypnutí ověřování.
Explicitní položky pro požadavek řídí zde zadané trasy, ale vynechaná schémata může stále ovlivnit zjišťování proxy z prostředí. Při přesunu volání do opakovaně použitelné Session rozhodněte, jak mají spolupracovat proměnné prostředí, výchozí hodnoty Session a přepsání pro požadavek; opětovné použití spojení a směrovací pravidla jsou oddělené volby.