Requests PreparedRequest и липсващи настройки на средата
Съгласувайте собствените подготвени заявки с нормалната proxy и 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 може да са грешни за действително изпратената заявка.
Настройката 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, сливането спазва тази политика; не налага настройки от средата на клиент, който умишлено ги е изключил.