Vidaresend gzip-byte med headarane som skildrar dei
Vel koda eller dekoda nyttelast i ein Requests-basert proxy, og gje deretter nedstraumsresponsen samsvarande content-headarar og si eiga innramming.
Viss Requests allereie har dekomprimert ein body, ber vidaresending med Content-Encoding: gzip neste klient om å dekomprimere han på nytt. Avgjer kva nyttelastframstilling proxyen sender før headarane vert kopierte.
| Send nyttelast | Content-headarar |
|---|---|
| Opphavlege koda byte | Hald på gjeldande koding og nøyaktig nyttelastlengd |
| Dekoda byte | Fjern den dekoda kodinga; fjern eller rekn ut den tilsvarande lengda på nytt |
For koda nyttelastbyte les dette utdraget den rå straumen frå urllib3 utan content-dekoding:
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 er den eksisterande responsutdataen. Statusen og headarane må allereie følgje den valde policyen; dette utdraget implementerer ikkje ein fullstendig proxyserver.
Transportinnramming er skild frå gzip content-koding. HTTP-biblioteket oppstraums har allereie handtert innramminga, inkludert fjerning av bitar, så ikkje kopier Transfer-Encoding blindt. Nedstraumsserveren rammar inn sitt eige svar sjølv når nyttelasta blir verande gzip-koda.
response.text etterfølgt av UTF-8-koding endrar òg framstillinga og kan ikkje ta vare på vilkårlege binære data. Lat att eller bruk oppstraumsresponsen på kvar veg, og handter HTTP-feil i samsvar med proxy-kontrakten: dette dømet kastar dei i staden for å vidaresende dei.