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() — асобны выбар; не чакайце аўтаматычнага ўжывання cookies сеанса або іншай падрыхтоўкі сеанса.
Для проксі дзейнічае больш канкрэтнае правіла
Было б недакладна казаць, што кожны PreparedRequest ігнаруе зменныя асяроддзя проксі. У Requests 2.34.2 send вызначае стандартныя проксі, калі няма найменаванага аргумента proxies. Перадача proxies={} у send прапускае менавіта гэтую галіну стандартнага вызначэння.
Пусты слоўнік, перададзены ў merge_environment_settings, мае іншую ролю: аб’яднанне можа запоўніць яго адпаведнымі маршрутамі асяроддзя да перадачы ў send. Разгляд толькі пустога слоўніка ў двух прыкладах не ўлічвае розныя метады, што яго атрымліваюць.
Ва ўласным кодзе пабудовы запытаў трымайце падрыхтоўку, аб’яднанне асяроддзя і адпраўку разам. Калі праграма наўмысна выкарыстоўвае trust_env=False, аб’яднанне паважае гэтую палітыку; яно не навязвае асяроддзе кліенту, які свядома яго адключыў.