Перанакіраванне з адносным Location праз проксі
Разлічыце адносны Location адносна бягучага URL прызначэння, не ўключаючы адрас проксі ў разлік URL.
Адказ, атрыманы праз проксі, можа вярнуць адносны Location:
Location: ../new/
Сучасны HTTP дазваляе тут спасылку URI. Разлічыце яе адносна URL, які стварыў адказ. Калі гэты URL быў https://docs.example/catalog/old/, спасылка вышэй вызначае https://docs.example/catalog/new/. Імя хоста проксі не з'яўляецца базай.
Для звычайных запытаў Python urllib выкарыстоўвайце яго апрацоўшчык перанакіраванняў, а не злучэнне радкоў вакол канчатковай кропкі проксі:
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()
Для гэтага запыту публічнага дакумента без аўтэнтыфікацыі проксі HTTP-кандыдат са спісу HTTP-проксі можа замяніць прыкладную канчатковую кропку, калі маршрут дазволены. Класы паходзяць з urllib.request. Яго звычайны апрацоўшчык ідзе па падтрыманых перанакіраваннях у сваіх межах. final_url апісвае канчатковы URL рэсурсу, а не пасярэдніка, праз якога ён дасягнуты.
Спачатку разлічыце, потым выбірайце наступны маршрут
Перанакіраванне можа змяніць хост або схему прызначэння. Таму палітыка проксі, заснаваная на прызначэнні, павінна ацэньваць і гэты новы URL. Маршрут, які працаваў для першага хоста, можа не падыходзіць для наступнага.
Калі вы самі рэалізуеце апрацоўку перанакіраванняў, выкарыстоўвайце разлік спасылкі URI з апрацоўкай кропкавых сегментаў. Захоўвайце правілы метаду фактычнага кода стану і ўвядзіце ліміт перанакіраванняў. Даданне Location да імя хоста не замяняе гэты алгарытм разліку.
Калі перанакіраванне не ўдалося, захавайце запытаны URL, стан адказу, значэнне Location і разлічаны наступны URL. Гэтыя чатыры значэнні звычайна паказваюць, ці памылка ў пабудове URL, ці ў злучэнні, паспробаваным пасля.