Trimite mai departe octeții gzip cu antetele care îi descriu
Alege încărcături codificate sau decodificate într-un proxy bazat pe Requests, apoi oferă răspunsului din aval antetele content corespunzătoare și propriul cadru.
Dacă Requests a decomprimat deja un corp, trimiterea lui cu Content-Encoding: gzip cere următorului client să îl decomprime din nou. Decide ce reprezentare a încărcăturii trimite proxy-ul înainte de a copia antetele.
| Încărcătură trimisă | Antete content |
|---|---|
| Octeți codificați originali | Păstrează codificarea aplicabilă și lungimea exactă a încărcăturii |
| Octeți decodificați | Elimină codificarea decodificată; elimină sau recalculează lungimea corespunzătoare |
Pentru octeții de încărcătură codificați, acest fragment citește fluxul brut al urllib3 fără decodificare 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 este ieșirea de răspuns existentă. Starea și antetele ei trebuie să urmeze deja politica aleasă; acest fragment nu implementează un server proxy complet.
Cadrarea transferului este separată de codificarea content gzip. Biblioteca HTTP din amonte a gestionat deja cadrarea, inclusiv eliminarea fragmentelor, așa că nu copia Transfer-Encoding orbește. Serverul din aval își cadrează propriul răspuns chiar și când încărcătura rămâne codificată gzip.
response.text urmat de codificare UTF-8 schimbă și el reprezentarea și nu poate păstra date binare arbitrare. Închide sau consumă răspunsul din amonte pe fiecare cale și tratează erorile HTTP conform contractului proxy: acest exemplu le aruncă în loc să le trimită mai departe.