Praćenje relativnog Location-a 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/
Savremeni HTTP ovdje dozvoljava 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 koristite njegov handler za preusmjeravanje umjesto spajanja stringova 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 iz HTTP proxy liste može zamijeniti primjer endpointa kada je ruta dozvoljena. Klase dolaze iz urllib.request. Njegov normalni handler prati 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, pa odaberite sljedeću rutu
Preusmjeravanje može promijeniti host ili šemu odredišta. Zato politika proxyja zasnovana 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, koristite razrješavanje URI reference s obradom tačkastih segmenata. Sačuvajte pravila metode stvarnog statusnog koda i uvedite ograničenje preusmjeravanja. Dodavanje Location-a 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 konekciji pokušanoj nakon toga.