Praćenje relativnog Locationa kroz proxy
Razrešite relativni Location prema trenutnom odredišnom URL-u, držeći adresu proxyja izvan razrešavanja URL-a.
Odgovor primljen kroz proxy može vratiti relativni Location:
Location: ../new/
Savremeni HTTP ovde dozvoljava URI referencu. Razrešite je prema URL-u koji je proizveo odgovor. Ako je taj URL bio https://docs.example/catalog/old/, gornja referenca označava https://docs.example/catalog/new/. Ime hosta proxyja nije osnova.
Za obične Python urllib zahteve koristite njegov rukovalac preusmeravanja umesto spajanja nizova oko proxy endpointa:
opener = build_opener(ProxyHandler({
"https": "http://proxy.example:8080",
}))
with opener.open("https://docs.example/catalog/old/",
timeout=15) as response:
final_url = response.geturl()
Za ovaj zahtev za javni dokument bez proxy autentifikacije, HTTP kandidat iz HTTP proxy liste može zameniti primerni endpoint kada je ruta dozvoljena. Klase dolaze iz urllib.request. Njegov normalni rukovalac prati podržana preusmeravanja u svojim granicama. final_url opisuje konačni URL resursa, a ne posrednika korišćenog da se do njega dođe.
Prvo razrešite, pa izaberite sledeću rutu
Preusmeravanje može promeniti host ili šemu odredišta. Zato politika proxyja zasnovana na odredištu mora proceniti i taj novi URL. Ruta koja je radila za prvi host možda nije ruta za sledeći.
Kada sami implementirate obradu preusmeravanja, koristite razrešavanje URI reference sa obradom tačkastih segmenata. Sačuvajte pravila metode stvarnog statusnog koda i uvedite ograničenje preusmeravanja. Dodavanje Locationa imenu hosta nije zamena za taj algoritam razrešavanja.
Ako preusmeravanje ne uspe, zadržite traženi URL, status odgovora, vrednost Location i razrešeni sledeći URL. Te četiri vrednosti obično pokazuju da li greška pripada konstrukciji URL-a ili konekciji pokušanoj posle toga.