Адказ, атрыманы праз проксі, можа вярнуць адносны 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, ці ў злучэнні, паспробаваным пасля.

Падобныя артыкулы