Requests gövdeyi zaten açtıysa, Content-Encoding: gzip ile iletmek sonraki istemciden onu yeniden açmasını ister. Başlıkları kopyalamadan önce proxy'nin hangi yük gösterimini gönderdiğine karar verin.

Gönderilen yükContent başlıkları
Orijinal kodlanmış baytlarGeçerli kodlamayı ve tam yük uzunluğunu koruyun
Kodu çözülmüş baytlarKodu çözülmüş kodlamayı kaldırın; ilgili uzunluğu kaldırın veya yeniden hesaplayın

Kodlanmış yük baytları için bu parça, urllib3'ün ham akışını content kod çözme olmadan okur:

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 mevcut yanıt çıktısıdır. Durumu ve başlıkları zaten seçilen politikaya uymalıdır; bu parça tam bir proxy sunucusu uygulamaz.

Aktarım çerçevelemesi gzip content kodlamasından ayrıdır. Üst akış HTTP kitaplığı çerçevelemeyi, parça kaldırma dahil, zaten işlemiştir, bu yüzden Transfer-Encoding öğesini körü körüne kopyalamayın. Alt akış sunucusu yük gzip kodlu kalsa bile kendi yanıtını çerçeveler.

response.text ardından UTF-8 kodlaması da gösterimi değiştirir ve rastgele ikili veriyi koruyamaz. Her yolda üst akış yanıtını kapatın veya tüketin ve HTTP hatalarını proxy sözleşmesine göre işleyin: bu örnek onları iletmek yerine fırlatır.

İlgili makaleler