Si Requests ja ha descomprimit un cos, reenviar-lo amb Content-Encoding: gzip demana al client següent que el descomprimeixi de nou. Decideix quina representació de la càrrega envia el proxy abans de copiar-ne les capçaleres.

Càrrega enviadaCapçaleres de contingut
Bytes codificats originalsConserva la codificació aplicable i la longitud exacta de la càrrega
Bytes descodificatsElimina la codificació descodificada; elimina o recalcula la longitud corresponent

Per als bytes de càrrega codificats, aquest fragment llegeix el flux brut d'urllib3 sense descodificació de contingut:

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 és la sortida de resposta existent. El seu estat i les seves capçaleres ja han de seguir la política triada; aquest fragment no implementa un servidor proxy complet.

L'emmarcament de transferència és independent de la codificació de contingut gzip. La biblioteca HTTP d'origen ja ha gestionat l'emmarcament, inclosa la retirada de fragments, així que no copiïs Transfer-Encoding a cegues. El servidor de destinació emmarca la seva pròpia resposta fins i tot quan la càrrega continua codificada amb gzip.

response.text seguit de la codificació UTF-8 també canvia la representació i no pot conservar dades binàries arbitràries. Tanca o consumeix la resposta d'origen a cada camí i gestiona els errors HTTP segons el contracte del proxy: aquest exemple els llança en lloc de reenviar-los.

Articles relacionats