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 tartalomContent fejlécek
Eredeti kódolt bájtokTartsa meg az alkalmazandó kódolást és a pontos tartalomhosszt
Dekódolt bájtokTá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á.

Kapcsolódó cikkek