Odpověď získaná přes proxy může vrátit relativní Location:

Location: ../new/

Moderní HTTP zde povoluje URI referenci. Vyřešte ji vůči URL, které odpověď vytvořilo. Pokud byla touto URL https://docs.example/catalog/old/, výše uvedená reference označuje https://docs.example/catalog/new/. Název hostitele proxy není základem.

U běžných požadavků Python urllib použijte jeho obslužnou rutinu přesměrování místo spojování řetězců kolem koncového bodu proxy:

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()

Pro tento požadavek na veřejný dokument bez ověřování proxy může HTTP kandidát ze seznamu HTTP proxy nahradit ukázkový koncový bod, pokud je trasa povolena. Třídy pocházejí z urllib.request. Jeho běžná obsluha následuje podporovaná přesměrování v rámci svých limitů. final_url popisuje výslednou URL zdroje, nikoli prostředníka použitého k jejímu dosažení.

Nejprve vyřešte, potom zvolte další trasu

Přesměrování může změnit cílového hostitele nebo schéma. Politika proxy založená na cíli proto musí vyhodnotit i tuto novou URL. Trasa, která fungovala pro prvního hostitele, nemusí být trasou pro dalšího.

Pokud implementujete zpracování přesměrování sami, použijte rozlišení URI reference se zpracováním tečkových segmentů. Zachovejte pravidla metody skutečného stavového kódu a zaveďte limit přesměrování. Připojení Location k názvu hostitele není náhradou tohoto algoritmu rozlišení.

Pokud přesměrování selže, uchovejte požadovanou URL, stav odpovědi, hodnotu Location a vyřešenou následující URL. Tyto čtyři hodnoty obvykle ukazují, zda selhání patří ke konstrukci URL, nebo k připojení pokusenému potom.

Související články