Agar Requests tanani allaqachon ochgan bo'lsa, uni Content-Encoding: gzip bilan uzatish keyingi mijozdan uni yana ochishni so'raydi. Sarlavhalarni nusxalashdan oldin proksi qaysi yuk tasvirini yuborishini hal qiling.

Yuborilgan yukContent sarlavhalari
Asl kodlangan baytlarQo'llaniladigan kodlashni va yukning aniq uzunligini saqlang
Dekodlangan baytlarDekodlangan kodlashni olib tashlang; tegishli uzunlikni olib tashlang yoki qayta hisoblang

Kodlangan yuk baytlari uchun bu parcha urllib3 ning xom oqimini content dekodlashsiz o'qiydi:

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 mavjud javob chiqishi. Uning holati va sarlavhalari allaqachon tanlangan siyosatga amal qilishi kerak; bu parcha to'liq proksi serverini amalga oshirmaydi.

Uzatish ramkasi gzip content kodlashidan alohida. Yuqori oqim HTTP kutubxonasi ramkalashni, jumladan bo'laklarni olib tashlashni allaqachon bajargan, shuning uchun Transfer-Encoding ni ko'r-ko'rona nusxalamang. Pastki server yuk gzip bilan kodlangan bo'lib qolsa ham o'z javobini ramkalaydi.

response.text va undan keyingi UTF-8 kodlash ham tasvirni o'zgartiradi va ixtiyoriy ikkilik ma'lumotlarni saqlay olmaydi. Har bir yo'lda yuqori oqim javobini yoping yoki iste'mol qiling va HTTP xatolarini proksi shartnomasiga muvofiq boshqaring: bu misol ularni uzatish o'rniga tashlaydi.

O'xshash maqolalar