Een antwoord dat via een proxy binnenkomt, kan een relatieve Location retourneren:

Location: ../new/

Moderne HTTP staat hier een URI-referentie toe. Los die op tegen de URL die het antwoord heeft geproduceerd. Als die URL https://docs.example/catalog/old/ was, wijst de verwijzing hierboven naar https://docs.example/catalog/new/. De hostnaam van de proxy is niet de basis.

Gebruik voor gewone Python urllib-verzoeken de omleidingshandler in plaats van strings rond het proxy-eindpunt aan elkaar te plakken:

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()

Voor dit verzoek om een openbaar document zonder proxy-authenticatie kan een HTTP-kandidaat uit de HTTP-proxylijst het voorbeeld-eindpunt vervangen wanneer de route is toegestaan. De klassen komen uit urllib.request. De normale handler volgt ondersteunde omleidingen binnen zijn grenzen. final_url beschrijft de uiteindelijke URL van de resource, niet de tussenpersoon die is gebruikt om die te bereiken.

Los eerst op, kies dan de volgende route

Een omleiding kan de bestemmingshost of het schema wijzigen. Een proxybeleid op basis van de bestemming moet daarom ook die nieuwe URL beoordelen. Een route die voor de eerste host werkte, is misschien niet de route voor de volgende.

Wanneer u de afhandeling van omleidingen zelf implementeert, gebruik dan URI-referentieoplossing met verwerking van puntsegmenten. Behoud de methoderegels van de werkelijke statuscode en stel een omleidingslimiet in. Location aan een hostnaam toevoegen is geen vervanging voor dat oplossingsalgoritme.

Als een omleiding mislukt, bewaar dan de aangevraagde URL, de responsstatus, de Location-waarde en de opgeloste volgende URL. Die vier waarden laten meestal zien of de fout bij de URL-constructie of bij de daarna geprobeerde verbinding hoort.

Gerelateerde artikelen