Odpowiedź otrzymana przez proxy może zwrócić względny Location:

Location: ../new/

Nowoczesny HTTP pozwala tutaj na odwołanie URI. Rozwiąż je względem URL, który utworzył odpowiedź. Jeśli tym URL był https://docs.example/catalog/old/, powyższe odwołanie wskazuje https://docs.example/catalog/new/. Nazwa hosta proxy nie jest podstawą.

W zwykłych żądaniach Python urllib użyj jego procedury obsługi przekierowań zamiast łączyć ciągi wokół punktu końcowego 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()

Dla tego żądania publicznego dokumentu bez uwierzytelniania proxy kandydat HTTP z listy proxy HTTP może zastąpić przykładowy punkt końcowy, gdy trasa jest dozwolona. Klasy pochodzą z urllib.request. Jego zwykła procedura obsługi podąża za obsługiwanymi przekierowaniami w swoich granicach. final_url opisuje końcowy URL zasobu, a nie pośrednika użytego do jego osiągnięcia.

Najpierw rozwiąż, potem wybierz następną trasę

Przekierowanie może zmienić hosta lub schemat docelowy. Dlatego polityka proxy oparta na celu musi ocenić także ten nowy URL. Trasa, która działała dla pierwszego hosta, może nie być trasą dla następnego.

Gdy samodzielnie implementujesz obsługę przekierowań, użyj rozwiązywania odwołań URI z obsługą segmentów kropkowych. Zachowaj reguły metody rzeczywistego kodu stanu i nałóż limit przekierowań. Dołączanie Location do nazwy hosta nie zastępuje tego algorytmu rozwiązywania.

Jeśli przekierowanie się nie powiedzie, zachowaj żądany URL, status odpowiedzi, wartość Location i rozwiązywany następny URL. Te cztery wartości zwykle pokazują, czy błąd należy do konstrukcji URL, czy do połączenia podjętego później.

Powiązane artykuły