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 အမှားများကို ကိုင်တွယ်ပါ။ ဤဥပမာသည် ၎င်းတို့ကို ပို့ဆောင်မည့်အစား ပစ်ချသည်။