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.

Povezani članci