Upotreba IP adrese proxyja u Python Requestsu
Postavite izričite proxy rute po zahtjevu u Requestsu, odaberite odgovarajuću shemu krajnje točke i obradite isteke vremena i neuspjehe HTTPS tunela.
Kada je Requests dostupan u projektu, proslijedite pozivu mapiranje proxyja:
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)
Zamijenite loopback krajnju točku svojim aktivnim proxyjem ili kandidatom s popisa HTTP proxyja kojeg ćete testirati ovim zahtjevom. Ključevi opisuju sheme odredišta: http za HTTP URL-ove i https za HTTPS URL-ove. Vrijednosti opisuju sučelje proxyja koje sluša. Ako mreža zahtijeva odvojene rute, mogu biti različite krajnje točke.
Vrijednost proxyja http:// pod ključem https namjerna je. Requests traži CONNECT tunel od HTTP sučelja pa kroz njega uspostavlja TLS s odredištem, uz pravila proxyja za odredišta i portove. Promjena vrijednosti u https:// traži TLS do samog proxyja; može zakazati ako sučelje očekuje nešifrirani HTTP.
Što znače dvije vrijednosti vremenskog ograničenja
timeout=(5, 15) postavlja ograničenja za povezivanje i čitanje. Ne nameće ukupni rok od petnaest sekundi. Podaci koji periodično pristižu, više adresa i pokušaji povezivanja mogu produljiti proteklo vrijeme. Requests ne daje opće vremensko ograničenje kad izostavite postavku. Odaberite granice primjerene odgovoru i dodajte rok na razini aplikacije ako posao zahtijeva strog ukupni vremenski proračun.
Obradite neuspjeh u fazi u kojoj nastaje
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)
Odbijeni CONNECT može izazvati ProxyError prije nego postoji odgovor odredišta. Grana HTTPError slijedi primljeni odgovor sa statusom pogreške; Timeout znači istek postavljene granice. Lance iznimki uspostave veze pregledajte lokalno i prije dijeljenja uklonite krajnje točke s vjerodajnicama i privatne URL-ove.
Ostavite provjeru certifikata uključenom. Ako ovlaštena mreža upotrebljava privatni CA ili upravljano presretanje, pružite očekivani materijal povjerenja umjesto isključivanja provjere.
Izričiti unosi po zahtjevu upravljaju ovdje navedenim rutama, ali na izostavljene sheme i dalje može utjecati otkrivanje proxyja iz okruženja. Kada poziv premještate u višekratno upotrebljivu Session, odredite kako trebaju međudjelovati varijable okruženja, zadane vrijednosti Session i nadjačavanja po zahtjevu; ponovna upotreba veze i politika usmjeravanja odvojene su odluke.