gzip baytlarını onları təsvir edən başlıqlarla ötürün
Requests əsaslı proksidə kodlanmış və ya dekodlanmış yükü seçin, sonra aşağı axın cavabına uyğun content başlıqları və öz çərçivələməsini verin.
Ə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ük | Content başlıqları |
|---|---|
| Orijinal kodlanmış baytlar | Tətbiq olunan kodlaşdırmanı və dəqiq yük uzunluğunu saxlayın |
| Dekodlanmış baytlar | Dekodlanmış 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.