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 பிழைகளைக் கையாளவும்: இந்த எடுத்துக்காட்டு அவற்றை அனுப்புவதற்குப் பதிலாக எறிகிறது.