Əgər Requests artıq gövdəni açıbsa, onu Content-Encoding: gzip ilə ötürmək növbəti müştəridən onu yenidən açmağı tələb edir. Başlıqları kopyalamadan əvvəl proksinin hansı yük təqdimatını göndərdiyini müəyyən edin.

Göndərilən yükContent başlıqları
Orijinal kodlanmış baytlarTətbiq olunan kodlaşdırmanı və dəqiq yük uzunluğunu saxlayın
Dekodlanmış baytlarDekodlanmış kodlaşdırmanı silin; uyğun uzunluğu silin və ya yenidən hesablayın

Kodlanmış yük baytları üçün bu fraqment urllib3-ün xam axınını content dekodlaması olmadan oxuyur:

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 mövcud cavab çıxışıdır. Onun statusu və başlıqları artıq seçilmiş siyasətə uyğun olmalıdır; bu fraqment tam proksi serveri tətbiq etmir.

Ötürmə çərçivələməsi gzip content kodlaşdırmasından ayrıdır. Yuxarı axın HTTP kitabxanası çərçivələməni, o cümlədən parçaların silinməsini artıq həll edib, ona görə də Transfer-Encoding-ü kor-koranə kopyalamayın. Aşağı axın serveri yük gzip ilə kodlanmış qalsa da öz cavabını çərçivələyir.

response.text ardınca UTF-8 kodlaşdırması da təqdimatı dəyişir və ixtiyari binar məlumatı saxlaya bilməz. Hər yolda yuxarı axın cavabını bağlayın və ya istehlak edin və HTTP xətalarını proksi müqaviləsinə uyğun idarə edin: bu nümunə onları ötürmək əvəzinə qaldırır.

Əlaqəli məqalələr