Et svar mottatt gjennom en proxy kan returnere en relativ Location:

Location: ../new/

Moderne HTTP tillater en URI-referanse her. Løs den opp mot URL-en som produserte svaret. Hvis den URL-en var https://docs.example/catalog/old/, identifiserer referansen ovenfor https://docs.example/catalog/new/. Proxyens vertsnavn er ikke basen.

For vanlige Python urllib-forespørsler bruker du omdirigeringsbehandleren i stedet for å sette sammen strenger rundt proxy-endepunktet:

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

For denne forespørselen om et offentlig dokument uten proxy-autentisering kan en HTTP-kandidat fra HTTP-proxylisten erstatte eksempel-endepunktet når ruten er tillatt. Klassene kommer fra urllib.request. Den vanlige behandleren følger støttede omdirigeringer innenfor sine grenser. final_url beskriver ressursens endelige URL, ikke mellomleddet som ble brukt for å nå den.

Løs opp først, velg deretter neste rute

En omdirigering kan endre målverten eller skjemaet. En destinasjonsbasert proxy-policy må derfor også vurdere den nye URL-en. En rute som fungerte for den første verten, er kanskje ikke ruten for den neste.

Når du selv implementerer håndtering av omdirigeringer, bruk URI-referanseoppslag med håndtering av punktsegmenter. Behold metode-reglene for den faktiske statuskoden, og sett en omdirigeringsgrense. Å legge Location til et vertsnavn er ikke en erstatning for den oppslagsalgoritmen.

Hvis en omdirigering mislykkes, beholder du den forespurte URL-en, svarstatusen, Location-verdien og den oppløste neste URL-en. Disse fire verdiene viser vanligvis om feilen hører til URL-konstruksjonen eller til tilkoblingen som ble forsøkt etterpå.

Relaterte artikler