Relatīvas novirzīšanas izsekošana caur starpniekserveri
Atrisiniet relatīvo Location attiecībā pret pašreizējo mērķa URL, paturot starpniekservera adresi ārpus URL risināšanas.
Atbilde, kas saņemta caur starpniekserveri, var atgriezt relatīvu Location:
Location: ../new/
Mūsdienu HTTP šeit atļauj URI atsauci. Atrisiniet to attiecībā pret URL, kas radīja atbildi. Ja šis URL bija https://docs.example/catalog/old/, iepriekš minētā atsauce norāda https://docs.example/catalog/new/. Starpniekservera resursdatora nosaukums nav pamats.
Parastiem Python urllib pieprasījumiem izmantojiet tā novirzīšanas apstrādātāju, nevis savienojiet virknes ap starpniekservera galapunktu:
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()
Šim publiska dokumenta pieprasījumam bez starpniekservera autentifikācijas HTTP kandidāts no HTTP starpniekserveru saraksta var aizstāt piemēra galapunktu, kad maršruts ir atļauts. Klases nāk no urllib.request. Tā parastais apstrādātājs seko atbalstītajiem novirzījumiem savās robežās. final_url apraksta resursa galīgo URL, nevis starpnieku, kas izmantots, lai to sasniegtu.
Vispirms atrisiniet, pēc tam izvēlieties nākamo maršrutu
Novirzīšana var mainīt mērķa resursdatoru vai shēmu. Tāpēc starpniekservera politikai, kas balstīta uz galamērķi, jāizvērtē arī šis jaunais URL. Maršruts, kas darbojās pirmajam resursdatoram, var nebūt maršruts nākamajam.
Kad novirzīšanas apstrādi ieviešat paši, izmantojiet URI atsauces risināšanu ar punktu segmentu apstrādi. Saglabājiet faktiskā statusa koda metodes noteikumus un nosakiet novirzīšanas ierobežojumu. Location pievienošana resursdatora nosaukumam neaizstāj šo risināšanas algoritmu.
Ja novirzīšana neizdodas, saglabājiet pieprasīto URL, atbildes statusu, Location vērtību un atrisināto nākamo URL. Šīs četras vērtības parasti parāda, vai kļūda saistīta ar URL konstruēšanu vai ar savienojumu, kas mēģināts pēc tam.