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 може да се погрешни за вистински испратеното барање.
Поставката 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, спојувањето ја почитува политиката; не наметнува околински поставки на клиент што свесно ги исклучил.