Запыт можа працаваць праз 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() — асобны выбар; не чакайце аўтаматычнага ўжывання cookies сеанса або іншай падрыхтоўкі сеанса.

Для проксі дзейнічае больш канкрэтнае правіла

Было б недакладна казаць, што кожны PreparedRequest ігнаруе зменныя асяроддзя проксі. У Requests 2.34.2 send вызначае стандартныя проксі, калі няма найменаванага аргумента proxies. Перадача proxies={} у send прапускае менавіта гэтую галіну стандартнага вызначэння.

Пусты слоўнік, перададзены ў merge_environment_settings, мае іншую ролю: аб’яднанне можа запоўніць яго адпаведнымі маршрутамі асяроддзя да перадачы ў send. Разгляд толькі пустога слоўніка ў двух прыкладах не ўлічвае розныя метады, што яго атрымліваюць.

Ва ўласным кодзе пабудовы запытаў трымайце падрыхтоўку, аб’яднанне асяроддзя і адпраўку разам. Калі праграма наўмысна выкарыстоўвае trust_env=False, аб’яднанне паважае гэтую палітыку; яно не навязвае асяроддзе кліенту, які свядома яго адключыў.

Падобныя артыкулы