Requests PreparedRequest и недостајуће поставке окружења
Ускладите сопствене припремљене захтеве с уобичајеном прокси и CA обрадом библиотеке Requests, без претпоставке да сваки send на ниском нивоу игнорише проксије.
Захтев може радити кроз 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 када провера није изричито надјачана. Директан позив send с подразумеваним verify не обавља ту CA претрагу. Искључивање провере скрива разлику уместо да пружи намеравано спремиште сертификата.
Session.prepare_request() примењује и понашање припреме сесије. Директно креирање захтева кроз Request.prepare() засебан је избор; не очекујте аутоматску примену сесијских колачића или друге сесијске припреме.
Проксији имају прецизније правило
Не би било тачно рећи да сваки PreparedRequest игнорише прокси променљиве окружења. У Requests 2.34.2 send разрешава подразумеване проксије када недостаје кључни аргумент proxies. Давање proxies={} методу send прескаче ту конкретну грану разрешавања.
Празан речник прослеђен у merge_environment_settings има другу улогу: спајање га може попунити применљивим путањама из окружења пре слања методу send. Гледање само празног речника у два примера занемарује различите методе које га примају.
У сопственом коду за грађење захтева држите припрему, спајање окружења и слање заједно. Када апликација намерно користи trust_env=False, спајање поштује ту политику; не намеће поставке окружења клијенту који их је свесно искључио.