Прямування відносного перенаправлення через проксі
Розв'яжіть відносний 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, чи з'єднання, спробуваного після.