Requests ఇప్పటికే బాడీని డీకంప్రెస్ చేసి ఉంటే, Content-Encoding: gzip తో దాన్ని పంపడం తదుపరి క్లయింట్‌ను మళ్లీ డీకంప్రెస్ చేయమని కోరుతుంది. హెడర్లను కాపీ చేయడానికి ముందు ప్రాక్సీ ఏ పేలోడ్ ప్రాతినిధ్యాన్ని పంపుతుందో నిర్ణయించండి.

పంపిన పేలోడ్content హెడర్లు
అసలు ఎన్‌కోడ్ చేసిన బైట్లువర్తించే ఎన్‌కోడింగ్ మరియు పేలోడ్ యొక్క ఖచ్చితమైన పొడవును ఉంచండి
డీకోడ్ చేసిన బైట్లుడీకోడ్ చేసిన ఎన్‌కోడింగ్‌ను తీసివేయండి; సంబంధిత పొడవును తీసివేయండి లేదా మళ్లీ లెక్కించండి

ఎన్‌కోడ్ చేసిన పేలోడ్ బైట్ల కోసం, ఈ భాగం content డీకోడింగ్ లేకుండా urllib3 యొక్క ముడి స్ట్రీమ్‌ను చదువుతుంది:

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 లోపాలను నిర్వహించండి: ఈ ఉదాహరణ వాటిని పంపడం బదులు విసిరివేస్తుంది.

సంబంధిత వ్యాసాలు