Inoltra i byte gzip con le intestazioni che li descrivono
Scegli payload codificati o decodificati in un proxy basato su Requests, poi assegna alla risposta a valle le intestazioni content corrispondenti e il proprio framing.
Se Requests ha già decompresso un corpo, inoltrarlo con Content-Encoding: gzip chiede al client successivo di decomprimerlo di nuovo. Decidi quale rappresentazione del payload invia il proxy prima di copiarne le intestazioni.
| Payload inviato | Intestazioni content |
|---|---|
| Byte codificati originali | Mantieni la codifica applicabile e la lunghezza esatta del payload |
| Byte decodificati | Rimuovi la codifica decodificata; rimuovi o ricalcola la lunghezza corrispondente |
Per i byte di payload codificati, questo frammento legge il flusso grezzo di urllib3 senza decodifica 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 è l'output di risposta esistente. Il suo stato e le sue intestazioni devono già seguire la politica scelta; questo frammento non implementa un server proxy completo.
Il framing del trasferimento è separato dalla codifica content gzip. La libreria HTTP a monte ha già gestito il framing, inclusa la rimozione dei blocchi, quindi non copiare Transfer-Encoding alla cieca. Il server a valle incornicia la propria risposta anche quando il payload resta codificato con gzip.
response.text seguito dalla codifica UTF-8 cambia anch'esso la rappresentazione e non può conservare dati binari arbitrari. Chiudi o consuma la risposta a monte su ogni percorso e gestisci gli errori HTTP secondo il contratto del proxy: questo esempio li solleva invece di inoltrarli.