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 dihantarPengepala content
Bait berkod asalKekalkan pengekodan yang berkenaan dan panjang muatan yang tepat
Bait dinyahkodAlih 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.

Artikel berkaitan