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 ഉപയോഗിക്കുമ്പോൾ ലയനം ആ നയം മാനിക്കുന്നു; പരിസരം മനഃപൂർവം നിർത്തിയ ക്ലയന്റിൽ ക്രമീകരണം അടിച്ചേൽപ്പിക്കില്ല.