ส่งต่อไบต์ gzip พร้อมส่วนหัวที่อธิบายไบต์เหล่านั้น
เลือกเพย์โหลดที่เข้ารหัสหรือถอดรหัสแล้วในพร็อกซีที่ใช้ Requests จากนั้นให้ส่วนหัว content ที่ตรงกันและการจัดเฟรมของตัวเองแก่การตอบสนองปลายทาง
หาก 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 ตามสัญญาพร็อกซี ตัวอย่างนี้โยนข้อผิดพลาดแทนที่จะส่งต่อ