gzip baytlarını onları tanımlayan başlıklarla iletin
Requests tabanlı bir proxy'de kodlanmış veya kodu çözülmüş yükü seçin, ardından alt akış yanıtına uygun content başlıklarını ve kendi çerçevelemesini verin.
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ük | Content başlıkları |
|---|---|
| Orijinal kodlanmış baytlar | Geçerli kodlamayı ve tam yük uzunluğunu koruyun |
| Kodu çözülmüş baytlar | Kodu çö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.