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 originaliPăstrează codificarea aplicabilă și lungimea exactă a încărcăturii
Octeți decodificațiElimină 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.

Articole similare