Volg 'n relatiewe herleiding deur die proxy
Los 'n relatiewe Location op teen die huidige bestemmings-URL, sodat die proxy-adres nie by URL-resolusie betrokke raak nie.
'n Antwoord wat deur 'n proxy ontvang word, kan 'n relatiewe Location terugstuur:
Location: ../new/
Moderne HTTP laat hier 'n URI-verwysing toe. Los dit op teen die URL wat die antwoord geproduseer het. As daardie URL https://docs.example/catalog/old/ was, wys die verwysing hierbo na https://docs.example/catalog/new/. Die gasheernaam van die proxy is nie die basis nie.
Vir gewone Python-urllib-versoeke gebruik u die herleidingshanteerder eerder as om stringe rondom die proxy-eindpunt aanmekaar te sit:
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()
Vir hierdie versoek om 'n openbare dokument sonder proxy-verifikasie kan 'n HTTP-kandidaat uit die HTTP-proxylys die voorbeeld-eindpunt vervang wanneer die roete toegelaat word. Die klasse kom uit urllib.request. Sy normale hanteerder volg ondersteunde herleidings binne sy perke. final_url beskryf die uiteindelike hulpbron-URL, nie die tussenganger wat gebruik is om dit te bereik nie.
Los eers op, kies dan die volgende roete
'n Herleiding kan die bestemmingsgasheer of -skema verander. 'n Bestemmingsgebaseerde proxybeleid moet dus ook daardie nuwe URL evalueer. 'n Roete wat vir die eerste gasheer gewerk het, is dalk nie die roete vir die volgende een nie.
Wanneer u herleidings self implementeer, gebruik URI-verwysingsresolusie met hantering van dot-segmente. Behou die metodesreels van die werklike statuskode en stel 'n herleidingslimiet. Om Location by 'n gasheernaam aan te heg, is nie 'n plaasvervanger vir daardie resolusie-algoritme nie.
As 'n herleiding misluk, behou die versoek-URL, antwoordstatus, Location-waarde en opgeloste volgende URL. Daardie vier waardes wys gewoonlik of die fout by URL-konstruksie of by die verbinding wat daarna probeer is, hoort.