Requests PreparedRequest ଓ ହଜିଥିବା ପରିବେଶ ସେଟିଂ
ପ୍ରତ୍ୟେକ ନିମ୍ନସ୍ତର send ପ୍ରକ୍ସି ଉପେକ୍ଷା କରେ ବୋଲି ନ ଭାବି, ନିଜ ପ୍ରସ୍ତୁତ ଅନୁରୋଧକୁ Requestsର ସାଧାରଣ ପ୍ରକ୍ସି ଓ CA ବ୍ୟବସ୍ଥା ସହ ମେଳାନ୍ତୁ।
ଅନୁରୋଧ session.get() ଦେଇ ଚାଲିପାରେ କିନ୍ତୁ PreparedRequest ଭାବେ ପୁଣି ଲେଖିଲେ ପ୍ରମାଣପତ୍ର ଯାଞ୍ଚରେ ବିଫଳ ହୋଇପାରେ। ନିମ୍ନସ୍ତର send ପଥ ସାଧାରଣ request ପଦ୍ଧତି ପରି ପରିବେଶ ମର୍ଜ କରେ ନାହିଁ।
import requests
with requests.Session() as session:
request = requests.Request("GET", "https://example.com/")
prepared = session.prepare_request(request)
settings = session.merge_environment_settings(
prepared.url, {}, None, None, None
)
response = session.send(
prepared,
timeout=(5, 15),
**settings,
)
response.raise_for_status()
print(response.status_code)
ଚାହିଁଥିବା URL ବଦଳ ପରେ ଶେଷ ପ୍ରସ୍ତୁତ URLରେ ମର୍ଜ କରନ୍ତୁ। ପ୍ରକ୍ସି ଓ ବାଇପାସ୍ ନିଷ୍ପତ୍ତି ଲକ୍ଷ୍ୟ ଉପରେ ନିର୍ଭରଶୀଳ, ତେଣୁ ପୁରୁଣା URLର ସେଟିଂ ପ୍ରକୃତ ଅନୁରୋଧ ପାଇଁ ଭୁଲ ହୋଇପାରେ।
CA ସେଟିଂ ସହଜରେ ଛାଡ଼ିଯାଏ
ସାଧାରଣ ପରିବେଶ ବିଶ୍ୱାସ ଚାଲୁ ଥିଲେ ଏବଂ ଯାଞ୍ଚ ସ୍ପଷ୍ଟ ଓଭରରାଇଡ୍ ନହେଲେ ମର୍ଜ REQUESTS_CA_BUNDLE ଓ ବିକଳ୍ପ CURL_CA_BUNDLE ଦେଖେ। ମୂଳ verify ସହ ସିଧା send ଏହି CA ସନ୍ଧାନ କରେ ନାହିଁ। ଯାଞ୍ଚ ବନ୍ଦ କରିବା ଚାହିଁଥିବା ପ୍ରମାଣପତ୍ର ଭଣ୍ଡାର ଦେବା ବଦଳରେ ତଫାତ ଲୁଚାଏ।
Session.prepare_request() ସେସନ୍ ପ୍ରସ୍ତୁତିର ଆଚରଣ ମଧ୍ୟ ଲଗାଏ। ସିଧା Request.prepare()ରେ ଅନୁରୋଧ ବନାଇବା ଅଲଗା ପସନ୍ଦ; ସେସନ୍ କୁକି କିମ୍ବା ଅନ୍ୟ ପ୍ରସ୍ତୁତି ଆପେ ଲାଗିବ ବୋଲି ଆଶା କରନ୍ତୁ ନାହିଁ।
ପ୍ରକ୍ସି ପାଇଁ ଅଧିକ ନିର୍ଦ୍ଦିଷ୍ଟ ନିୟମ ଅଛି
ପ୍ରତ୍ୟେକ PreparedRequest ପ୍ରକ୍ସି ପରିବେଶ ଚଳ ଉପେକ୍ଷା କରେ କହିବା ଭୁଲ। Requests 2.34.2ରେ proxies ନାମିତ ଆର୍ଗୁମେଣ୍ଟ ନଥିଲେ send ମୂଳ ପ୍ରକ୍ସି ନିର୍ଣ୍ଣୟ କରେ। sendକୁ proxies={} ଦେଲେ ସେହି ନିର୍ଦ୍ଦିଷ୍ଟ ମୂଳ ନିର୍ଣ୍ଣୟ ଶାଖା ଛାଡ଼େ।
merge_environment_settingsକୁ ଦିଆ ଖାଲି ଡିକ୍ସନାରିର ଭୂମିକା ଅଲଗା: sendକୁ ଦେବା ପୂର୍ବରୁ ମର୍ଜ ତାହାକୁ ଲାଗୁ ପରିବେଶ ପଥରେ ଭରିପାରେ। ଦୁଇ କୋଡ୍ରେ କେବଳ ଖାଲି ଡିକ୍ସନାରି ଦେଖିଲେ ତାହା ନେଉଥିବା ଅଲଗା ପଦ୍ଧତି ଛାଡ଼ିଯାଏ।
ନିଜ ଅନୁରୋଧ ତିଆରି କୋଡ୍ରେ ପ୍ରସ୍ତୁତି, ପରିବେଶ ମର୍ଜ ଓ ପଠାଇବା ଏକାଠି ରଖନ୍ତୁ। ଆପ୍ ଇଚ୍ଛାକୃତ trust_env=False ବ୍ୟବହାର କଲେ ମର୍ଜ ସେ ନୀତି ମାନେ; ପରିବେଶ ଜାଣିଶୁଣି ବନ୍ଦ କରିଥିବା କ୍ଲାଏଣ୍ଟରେ ସେଟିଂ ଜୋର କରେ ନାହିଁ।