หาก Requests คลายการบีบอัดเนื้อหาไปแล้ว การส่งต่อด้วย Content-Encoding: gzip จะขอให้ไคลเอนต์ถัดไปคลายการบีบอัดอีกครั้ง ตัดสินใจว่าพร็อกซีจะส่งการแทนค่าเพย์โหลดแบบใดก่อนคัดลอกส่วนหัว

เพย์โหลดที่ส่งส่วนหัว content
ไบต์ที่เข้ารหัสต้นฉบับคงการเข้ารหัสที่ใช้ได้และความยาวเพย์โหลดที่แน่นอน
ไบต์ที่ถอดรหัสลบการเข้ารหัสที่ถอดรหัสแล้ว ลบหรือคำนวณความยาวที่สอดคล้องใหม่

สำหรับไบต์เพย์โหลดที่เข้ารหัส ส่วนนี้จะอ่านสตรีมดิบของ urllib3 โดยไม่ถอดรหัส 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 คือเอาต์พุตการตอบสนองที่มีอยู่ สถานะและส่วนหัวต้องเป็นไปตามนโยบายที่เลือกไว้แล้ว ส่วนนี้ไม่ได้ใช้งานพร็อกซีเซิร์ฟเวอร์ที่สมบูรณ์

การจัดเฟรมการรับส่งแยกจากการเข้ารหัส content gzip ไลบรารี HTTP ต้นทางจัดการการจัดเฟรมแล้ว รวมถึงการลบชังก์ ดังนั้นอย่าคัดลอก Transfer-Encoding อย่างไม่ลืมหูลืมตา เซิร์ฟเวอร์ปลายทางจัดเฟรมการตอบสนองของตัวเองแม้เพย์โหลดยังคงเข้ารหัสด้วย gzip

response.text ตามด้วยการเข้ารหัส UTF-8 ก็เปลี่ยนการแทนค่าและไม่สามารถรักษาข้อมูลไบนารีตามอำเภอใจได้ ปิดหรือใช้การตอบสนองต้นทางในทุกเส้นทาง และจัดการข้อผิดพลาด HTTP ตามสัญญาพร็อกซี ตัวอย่างนี้โยนข้อผิดพลาดแทนที่จะส่งต่อ

บทความที่เกี่ยวข้อง