Praćenje relativnog Locationa kroz proxy
Razriješite relativni Location u odnosu na trenutni odredišni URL, držeći adresu proxyja izvan razrješavanja URL-a.
Odgovor primljen kroz proxy može vratiti relativni Location:
Location: ../new/
Suvremeni HTTP ovdje dopušta URI referencu. Razriješite je u odnosu na URL 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 zahtjeve upotrijebite njegov rukovatelj preusmjeravanja umjesto 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 zahtjev za javni dokument bez proxy autentifikacije HTTP kandidat s popisa HTTP proxyja može zamijeniti primjer endpointa kada je ruta dopuštena. Klase dolaze iz urllib.request. Njegov uobičajeni rukovatelj slijedi podržana preusmjeravanja u svojim granicama. final_url opisuje konačni URL resursa, a ne posrednika korištenog da se do njega dođe.
Prvo razriješite, zatim odaberite sljedeću rutu
Preusmjeravanje može promijeniti host ili shemu odredišta. Stoga politika proxyja temeljena na odredištu mora procijeniti i taj novi URL. Ruta koja je radila za prvi host možda nije ruta za sljedeći.
Kada sami implementirate obradu preusmjeravanja, upotrijebite razrješavanje URI reference s obradom točkastih segmenata. Sačuvajte pravila metode stvarnog statusnog koda i uvedite ograničenje preusmjeravanja. Dodavanje Locationa imenu hosta nije zamjena za taj algoritam razrješavanja.
Ako preusmjeravanje ne uspije, zadržite traženi URL, status odgovora, vrijednost Location i razriješeni sljedeći URL. Te četiri vrijednosti obično pokazuju pripada li greška konstrukciji URL-a ili vezi pokušanoj nakon toga.