Хэрэв 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 алдааг прокси гэрээний дагуу шийдвэрлэ: энэ жишээ тэдгээрийг дамжуулахын оронд шиддэг.

Холбоотой нийтлэлүүд