Проследите gzip бајтове са заглављима која их описују
Изаберите кодирани или декодирани садржај у проксију заснованом на Requests, а затим дајте низводном одговору одговарајућа content заглавља и сопствено уоквиривање.
Ако је 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 грешке према proxy уговору: овај пример их подиже уместо да их прослеђује.