Përcillni bajtët gzip me titujt që i përshkruajnë
Zgjidhni ngarkesa të koduara ose të dekoduara në një proxy të bazuar në Requests, më pas jepini përgjigjes në rrjedhën e poshtme titujt content përkatës dhe kornizimin e vet.
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ërguar | Titujt content |
|---|---|
| Bajtët origjinalë të koduar | Mbajini kodimin e zbatueshëm dhe gjatësinë e saktë të ngarkesës |
| Bajtët e dekoduar | Hiqni 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ë.