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 વાપરે તો મર્જ તે નીતિ માને છે; પર્યાવરણ ઇરાદાપૂર્વક બંધ કરનાર ક્લાયન્ટ પર ગોઠવણી લાદતું નથી.