gzip ബൈറ്റുകൾ അവയെ വിവരിക്കുന്ന ഹെഡറുകളോടെ കൈമാറുക
Requests അടിസ്ഥാനമാക്കിയ പ്രോക്സിയിൽ എൻകോഡ് ചെയ്തതോ ഡീകോഡ് ചെയ്തതോ ആയ പേലോഡ് തിരഞ്ഞെടുക്കുക, തുടർന്ന് ഡൗൺസ്ട്രീം പ്രതികരണത്തിന് യോജിക്കുന്ന content ഹെഡറുകളും അതിന്റെ സ്വന്തം ഫ്രെയിമിംഗും നൽകുക.
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 പിശകുകൾ കൈകാര്യം ചെയ്യുക: ഈ ഉദാഹരണം അവ കൈമാറുന്നതിന് പകരം എറിയുന്നു.