Nëse Requests tashmë e ka dekompresuar një trup, përcillja e tij me Content-Encoding: gzip i kërkon klientit tjetër ta dekompresojë përsëri. Vendosni cilën paraqitje të ngarkesës dërgon proxy-i përpara se të kopjoni titujt.

Ngarkesa e dërguarTitujt content
Bajtët origjinalë të koduarMbajini kodimin e zbatueshëm dhe gjatësinë e saktë të ngarkesës
Bajtët e dekoduarHiqni kodimin e dekoduar; hiqni ose rillogaritni gjatësinë përkatëse

Për bajtët e ngarkesës të koduar, ky fragment lexon rrjedhën e papërpunuar të urllib3 pa dekodim content:

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 është dalja ekzistuese e përgjigjes. Statusi dhe titujt e saj duhet të ndjekin tashmë politikën e zgjedhur; ky fragment nuk zbaton një server proxy të plotë.

Kornizimi i transmetimit është i ndarë nga kodimi content gzip. Biblioteka HTTP e rrjedhës së sipërme tashmë e ka trajtuar kornizimin, duke përfshirë heqjen e copave, prandaj mos e kopjoni Transfer-Encoding verbërisht. Serveri në rrjedhën e poshtme kornizon përgjigjen e vet edhe kur ngarkesa mbetet e koduar me gzip.

response.text i ndjekur nga kodimi UTF-8 gjithashtu ndryshon paraqitjen dhe nuk mund të ruajë të dhëna binare arbitrare. Mbyllni ose konsumoni përgjigjen e rrjedhës së sipërme në çdo rrugë dhe trajtoni gabimet HTTP sipas kontratës së proxy-t: ky shembull i hedh ato në vend që t'i përcjellë.

Artikuj të ngjashëm