Proslijedite gzip bajtove sa zaglavljima koja ih opisuju
Odaberite kodirani ili dekodirani sadržaj u proxyju zasnovanom na Requests, a zatim dajte nizvodnom odgovoru odgovarajuća content zaglavlja i vlastito uokvirivanje.
Ako je Requests već dekomprimovao tijelo, prosljeđivanje s Content-Encoding: gzip traži od sljedećeg klijenta da ga ponovo dekomprimuje. Odlučite koji prikaz sadržaja proxy šalje prije kopiranja zaglavlja.
| Poslani sadržaj | Content zaglavlja |
|---|---|
| Izvorni kodirani bajtovi | Zadržite primjenjivo kodiranje i tačnu dužinu sadržaja |
| Dekodirani bajtovi | Uklonite dekodirano kodiranje; uklonite ili ponovo izračunajte odgovarajuću dužinu |
Za kodirane bajtove sadržaja ovaj fragment čita sirovi tok urllib3 bez 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 postojeći izlaz odgovora. Njegov status i zaglavlja već moraju slijediti odabranu politiku; ovaj fragment ne implementira potpuni proxy server.
Uokvirivanje prijenosa odvojeno je od gzip content kodiranja. HTTP biblioteka uzvodno već je obradila uokvirivanje, uključujući uklanjanje dijelova, pa ne kopirajte Transfer-Encoding naslijepo. Nizvodni server uokviruje vlastiti odgovor čak i kada sadržaj ostane gzip-kodiran.
response.text praćen UTF-8 kodiranjem također mijenja prikaz i ne može sačuvati proizvoljne binarne podatke. Zatvorite ili potrošite uzvodni odgovor na svakoj putanji i obrađujte HTTP greške prema proxy ugovoru: ovaj primjer ih podiže umjesto da ih prosljeđuje.