Továbbítsa a gzip bájtokat a leíró fejlécekkel együtt
Válasszon kódolt vagy dekódolt tartalmat egy Requests-alapú proxyban, majd adja a továbbított válasznak a megfelelő content fejléceket és a saját keretezését.
Ha a Requests már kicsomagolta a törzset, a Content-Encoding: gzip fejléccel való továbbítás arra kéri a következő klienst, hogy csomagolja ki újra. Döntse el, melyik tartalomábrázolást küldi a proxy, mielőtt a fejléceket másolja.
| Elküldött tartalom | Content fejlécek |
|---|---|
| Eredeti kódolt bájtok | Tartsa meg az alkalmazandó kódolást és a pontos tartalomhosszt |
| Dekódolt bájtok | Távolítsa el a dekódolt kódolást; távolítsa el vagy számítsa újra a megfelelő hosszt |
A kódolt tartalombájtok esetében ez a részlet az urllib3 nyers adatfolyamát olvassa content-dekódolás nélkül:
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 a meglévő válaszkimenet. Állapotának és fejléceinek már a választott szabályzatot kell követniük; ez a részlet nem valósít meg teljes proxykiszolgálót.
Az átviteli keretezés elkülönül a gzip content-kódolástól. A felső HTTP-könyvtár már kezelte a keretezést, beleértve a darabok eltávolítását, ezért ne másolja vakon a Transfer-Encoding fejlécet. Az alsó kiszolgáló a saját válaszát keretezi akkor is, ha a tartalom gzip-kódolt marad.
A response.text és az azt követő UTF-8 kódolás szintén megváltoztatja az ábrázolást, és nem tud tetszőleges bináris adatot megőrizni. Minden útvonalon zárja le vagy fogyassza el a felső választ, és a HTTP-hibákat a proxy szerződése szerint kezelje: ez a példa dobja őket ahelyett, hogy továbbítaná.