Sledovanie relatívneho presmerovania cez proxy
Vyriešte relatívny Location voči aktuálnemu cieľovému URL a ponechajte adresu proxy mimo rozlíšenia URL.
Odpoveď získaná cez proxy môže vrátiť relatívny Location:
Location: ../new/
Moderný HTTP tu povoľuje URI referenciu. Vyriešte ju voči URL, ktoré odpoveď vytvorilo. Ak bolo tým URL https://docs.example/catalog/old/, vyššie uvedená referencia označuje https://docs.example/catalog/new/. Názov hostiteľa proxy nie je základ.
Pri bežných požiadavkách Python urllib použite jeho obsluhu presmerovania namiesto spájania reťazcov okolo 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()
Pre túto požiadavku na verejný dokument bez overovania proxy môže HTTP kandidát zo zoznamu HTTP proxy nahradiť ukážkový koncový bod, ak je trasa povolená. Triedy pochádzajú z urllib.request. Jeho bežná obsluha nasleduje podporované presmerovania v rámci svojich limitov. final_url opisuje výsledné URL zdroja, nie sprostredkovateľa použitého na jeho dosiahnutie.
Najprv vyriešte, potom zvoľte ďalšiu trasu
Presmerovanie môže zmeniť cieľového hostiteľa alebo schému. Preto politika proxy založená na cieli musí vyhodnotiť aj toto nové URL. Trasa, ktorá fungovala pre prvého hostiteľa, nemusí byť trasou pre ďalšieho.
Ak implementujete spracovanie presmerovaní sami, použite rozlíšenie URI referencie so spracovaním bodkových segmentov. Zachovajte pravidlá metódy skutočného stavového kódu a zaveďte limit presmerovaní. Pripojenie Location k názvu hostiteľa nie je náhradou tohto algoritmu rozlíšenia.
Ak presmerovanie zlyhá, uchovajte požadované URL, stav odpovede, hodnotu Location a vyriešené nasledujúce URL. Tieto štyri hodnoty zvyčajne ukazujú, či zlyhanie patrí ku konštrukcii URL alebo k pripojeniu pokúšanému potom.