Teruskan bait gzip dengan pengepala yang menerangkannya
Pilih muatan berkod atau dinyahkod dalam proksi berasaskan Requests, kemudian berikan respons hilir pengepala content yang sepadan dan pembingkaiannya sendiri.
Jika Requests sudah menyahmampat badan, meneruskannya dengan Content-Encoding: gzip meminta klien seterusnya menyahmampatnya semula. Tentukan perwakilan muatan mana yang dihantar oleh proksi sebelum menyalin pengepalanya.
| Muatan dihantar | Pengepala content |
|---|---|
| Bait berkod asal | Kekalkan pengekodan yang berkenaan dan panjang muatan yang tepat |
| Bait dinyahkod | Alih keluar pengekodan yang dinyahkod; alih keluar atau kira semula panjang yang sepadan |
Untuk bait muatan berkod, serpihan ini membaca strim mentah urllib3 tanpa penyahkodan 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 ialah output respons sedia ada. Status dan pengepalanya mesti sudah mengikut dasar yang dipilih; serpihan ini tidak melaksanakan pelayan proksi lengkap.
Pembingkaian pemindahan berasingan daripada pengekodan content gzip. Pustaka HTTP huluan sudah mengendalikan pembingkaian, termasuk pembuangan ketulan, jadi jangan salin Transfer-Encoding secara buta. Pelayan hiliran membingkaikan responsnya sendiri walaupun muatan kekal berkod gzip.
response.text diikuti pengekodan UTF-8 juga mengubah perwakilan dan tidak dapat mengekalkan data binari sewenang-wenangnya. Tutup atau gunakan respons huluan pada setiap laluan, dan kendalikan ralat HTTP mengikut kontrak proksi: contoh ini melontarnya dan bukannya meneruskannya.