Sledenje relativnemu preusmerjanju skozi proxy
Razrešite relativni Location glede na trenutni ciljni URL, pri čemer naslov proxyja ostane zunaj razreševanja URL.
Odgovor, prejet skozi proxy, lahko vrne relativni Location:
Location: ../new/
Sodobni HTTP tukaj dovoljuje referenco URI. Razrešite jo glede na URL, ki je ustvaril odgovor. Če je bil ta URL https://docs.example/catalog/old/, zgornja referenca označuje https://docs.example/catalog/new/. Ime gostitelja proxyja ni osnova.
Za običajne zahteve Python urllib uporabite njegov upravljalnik preusmeritev, namesto da bi lepili nize okoli končne točke proxyja:
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()
Za to zahtevo za javni dokument brez preverjanja proxyja lahko kandidat HTTP s seznama proxyjev HTTP nadomesti vzorčno končno točko, ko je pot dovoljena. Razredi prihajajo iz urllib.request. Njegov običajni upravljalnik sledi podprtim preusmeritvam v svojih mejah. final_url opisuje končni URL vira, ne posrednika, uporabljenega za dosego le-tega.
Najprej razrešite, nato izberite naslednjo pot
Preusmeritev lahko spremeni ciljnega gostitelja ali shemo. Zato mora politika proxyja, ki temelji na cilju, ovrednotiti tudi ta novi URL. Pot, ki je delovala za prvega gostitelja, morda ni pot za naslednjega.
Ko sami izvajate obdelavo preusmeritev, uporabite razreševanje reference URI z obdelavo točkovnih segmentov. Ohranite pravila metode dejanske statusne kode in uvedite omejitev preusmeritev. Dodajanje Location imenu gostitelja ni nadomestilo za ta algoritem razreševanja.
Če preusmeritev ne uspe, ohranite zahtevani URL, status odgovora, vrednost Location in razrešeni naslednji URL. Te štiri vrednosti običajno pokažejo, ali napaka pripada gradnji URL ali povezavi, poskušeni zatem.