Weiterleitung mit relativer Location-Angabe über den Proxy auflösen
Eine relative Location gegen die aktuelle Ziel-URL auflösen, damit die Proxy-Adresse nicht in die URL-Auflösung eingeht.
Eine Antwort, die über einen Proxy empfangen wurde, kann eine relative Location-Angabe enthalten:
Location: ../new/
Modernes HTTP erlaubt hier eine URI-Referenz. Lösen Sie sie gegen die URL auf, die die Antwort erzeugt hat. War diese URL https://docs.example/catalog/old/, so bezeichnet die obige Referenz https://docs.example/catalog/new/. Der Hostname des Proxys ist nicht die Basis.
Bei gewöhnlichen Python-urllib-Anfragen verwenden Sie den Weiterleitungs-Handler, statt Zeichenketten um den Proxy-Endpunkt herum zu verketten:
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()
Für diese Anfrage nach einem öffentlichen Dokument ohne Proxy-Authentifizierung kann ein HTTP-Kandidat aus der HTTP-Proxy-Liste den Beispiel-Endpunkt ersetzen, wenn die Route zulässig ist. Die Klassen stammen aus urllib.request. Sein normaler Handler folgt unterstützten Weiterleitungen innerhalb seiner Grenzen. final_url beschreibt die endgültige Ressourcen-URL, nicht den Vermittler, über den sie erreicht wurde.
Erst auflösen, dann die nächste Route wählen
Eine Weiterleitung kann den Ziel-Host oder das Schema ändern. Eine zielbasierte Proxy-Richtlinie muss daher auch die neue URL prüfen. Eine Route, die für den ersten Host funktionierte, ist möglicherweise nicht die Route für den nächsten.
Wenn Sie die Behandlung von Weiterleitungen selbst implementieren, verwenden Sie die URI-Referenzauflösung mit Behandlung von Dot-Segmenten. Behalten Sie die Methodenregeln des tatsächlichen Statuscodes bei und setzen Sie eine Grenze für Weiterleitungen. Das Anhängen von Location an einen Hostnamen ist kein Ersatz für diesen Auflösungsalgorithmus.
Wenn eine Weiterleitung fehlschlägt, behalten Sie die angeforderte URL, den Antwortstatus, den Location-Wert und die aufgelöste nächste URL. Diese vier Werte zeigen meist, ob der Fehler zur URL-Konstruktion oder zu der danach versuchten Verbindung gehört.