Če je Requests telo že dekomprimiral, posredovanje z Content-Encoding: gzip zahteva od naslednjega odjemalca, da ga znova dekomprimira. Odločite se, katero predstavitev obremenitve pošilja proxy, preden kopirate glave.

Poslana obremenitevContent glave
Izvirni kodirani bajtiOhranite veljavno kodiranje in natančno dolžino obremenitve
Dekodirani bajtiOdstranite dekodirano kodiranje; odstranite ali znova izračunajte ustrezno dolžino

Za kodirane bajte obremenitve ta del bere surov tok urllib3 brez content dekodiranja:

with requests.get(url, stream=True, timeout=(5, 30)) as upstream:
    upstream.raise_for_status()
    for block in upstream.raw.stream(65536, decode_content=False):
        downstream.write(block)

downstream je obstoječi izhod odgovora. Njegovo stanje in glave morajo že slediti izbrani politiki; ta del ne izvaja popolnega proxy strežnika.

Okvirjanje prenosa je ločeno od gzip content kodiranja. Knjižnica HTTP navzgor je okvirjanje že obdelala, vključno z odstranjevanjem delov, zato Transfer-Encoding ne kopirajte na slepo. Strežnik navzdol okvirja svoj odgovor, tudi ko obremenitev ostane kodirana z gzip.

response.text s kodiranjem UTF-8 prav tako spremeni predstavitev in ne more ohraniti poljubnih binarnih podatkov. Na vsaki poti zaprite ali porabite odgovor navzgor in obravnavajte napake HTTP v skladu s pogodbo proxy: ta primer jih vrže, namesto da bi jih posredoval.

Sorodni članki