gzip ବାଇଟ୍ଗୁଡ଼ିକୁ ସେଗୁଡ଼ିକୁ ବର୍ଣ୍ଣନା କରୁଥିବା ହେଡର ସହିତ ଆଗକୁ ପଠାନ୍ତୁ
Requests-ଆଧାରିତ ପ୍ରକ୍ସିରେ ଏନକୋଡେଡ୍ କିମ୍ବା ଡିକୋଡେଡ୍ ପେଲୋଡ୍ ବାଛନ୍ତୁ, ତାପରେ ଡାଉନଷ୍ଟ୍ରିମ୍ ପ୍ରତିକ୍ରିୟାକୁ ମେଳ ଖାଉଥିବା content ହେଡର ଏବଂ ଏହାର ନିଜସ୍ୱ ଫ୍ରେମିଂ ଦିଅନ୍ତୁ।
ଯଦି Requests ପୂର୍ବରୁ ଏକ ବଡି ଡିକମ୍ପ୍ରେସ୍ କରିଛି, Content-Encoding: gzip ସହିତ ଏହାକୁ ଆଗକୁ ପଠାଇବା ପରବର୍ତ୍ତୀ କ୍ଲାଏଣ୍ଟକୁ ଏହାକୁ ପୁନର୍ବାର ଡିକମ୍ପ୍ରେସ୍ କରିବାକୁ କହେ। ହେଡର କପି କରିବା ପୂର୍ବରୁ ପ୍ରକ୍ସି କେଉଁ ପେଲୋଡ୍ ପ୍ରତିନିଧିତ୍ୱ ପଠାଏ ତାହା ନିର୍ଣ୍ଣୟ କରନ୍ତୁ।
| ପଠାଯାଇଥିବା ପେଲୋଡ୍ | content ହେଡର |
|---|---|
| ମୂଳ ଏନକୋଡେଡ୍ ବାଇଟ୍ | ପ୍ରଯୁଜ୍ୟ କୋଡିଂ ଏବଂ ସଠିକ୍ ପେଲୋଡ୍ ଲମ୍ବା ରଖନ୍ତୁ |
| ଡିକୋଡେଡ୍ ବାଇଟ୍ | ଡିକୋଡେଡ୍ କୋଡିଂ ଅପସାରଣ କରନ୍ତୁ; ସମ୍ପୃକ୍ତ ଲମ୍ବା ଅପସାରଣ କରନ୍ତୁ କିମ୍ବା ପୁନଃ ଗଣନା କରନ୍ତୁ |
ଏନକୋଡେଡ୍ ପେଲୋଡ୍ ବାଇଟ୍ ପାଇଁ, ଏହି ଅଂଶ urllib3 ର କଞ୍ଚା ଷ୍ଟ୍ରିମ୍ 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 ବିଦ୍ୟମାନ ପ୍ରତିକ୍ରିୟା ଆଉଟପୁଟ୍। ଏହାର ସ୍ଥିତି ଏବଂ ହେଡର ପୂର୍ବରୁ ବଛାଯାଇଥିବା ନୀତି ଅନୁସରଣ କରିବା ଉଚିତ; ଏହି ଅଂଶ ସମ୍ପୂର୍ଣ୍ଣ ପ୍ରକ୍ସି ସର୍ଭର କାର୍ଯ୍ୟକାରୀ କରେ ନାହିଁ।
ଟ୍ରାନ୍ସଫର ଫ୍ରେମିଂ gzip content କୋଡିଂଠାରୁ ଅଲଗା। ଅପଷ୍ଟ୍ରିମ୍ HTTP ଲାଇବ୍ରେରୀ ଚଙ୍କ ଅପସାରଣ ସହିତ ଫ୍ରେମିଂ ପୂର୍ବରୁ ସମ୍ଭାଳିଛି, ତେଣୁ Transfer-Encoding କୁ ଆଖି ବନ୍ଦ କରି କପି କରନ୍ତୁ ନାହିଁ। ପେଲୋଡ୍ gzip-ଏନକୋଡେଡ୍ ରହିଲେ ମଧ୍ୟ ଡାଉନଷ୍ଟ୍ରିମ୍ ସର୍ଭର ନିଜ ପ୍ରତିକ୍ରିୟାକୁ ଫ୍ରେମ୍ କରେ।
response.text ପରେ UTF-8 ଏନକୋଡିଂ ମଧ୍ୟ ପ୍ରତିନିଧିତ୍ୱ ବଦଳାଏ ଏବଂ ଇଚ୍ଛାଧୀନ ବାଇନାରୀ ଡାଟା ସଂରକ୍ଷଣ କରିପାରେ ନାହିଁ। ପ୍ରତ୍ୟେକ ପଥରେ ଅପଷ୍ଟ୍ରିମ୍ ପ୍ରତିକ୍ରିୟା ବନ୍ଦ କରନ୍ତୁ କିମ୍ବା ବ୍ୟବହାର କରନ୍ତୁ, ଏବଂ ପ୍ରକ୍ସି ଚୁକ୍ତି ଅନୁସାରେ HTTP ତ୍ରୁଟି ସମ୍ଭାଳନ୍ତୁ: ଏହି ଉଦାହରଣ ସେଗୁଡ଼ିକୁ ଆଗକୁ ପଠାଇବା ପରିବର୍ତ୍ତେ ଫିଙ୍ଗେ।