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 нь одоо байгаа хариултын гаралт юм. Түүний төлөв болон толгойн мөрүүд аль хэдийн сонгосон бодлогыг дагах ёстой; энэ хэсэг бүрэн прокси серверийг хэрэгжүүлэхгүй.
Дамжуулалтын хүрээ нь gzip content кодлолоос тусдаа. Дээд талын HTTP сан хүрээг, үүний дотор хэсгүүдийг устгахыг аль хэдийн шийдсэн тул Transfer-Encoding-ийг сохроор бүү хуул. Доод талын сервер ачаалал gzip-ээр кодлогдсон хэвээр байсан ч өөрийн хариултыг хүрээлнэ.
response.text дараа нь UTF-8 кодлол хийх нь мөн дүрслэлийг өөрчилдөг бөгөөд дур зоргоороо хоёртын өгөгдлийг хадгалж чадахгүй. Зам бүр дээр дээд талын хариултыг хаа эсвэл хэрэглэ, мөн HTTP алдааг прокси гэрээний дагуу шийдвэрлэ: энэ жишээ тэдгээрийг дамжуулахын оронд шиддэг.