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 ຈະຫາຄ່າພຣັອກຊີເລີ່ມຕົ້ນເມື່ອຂາດ argument ຊື່ proxies. ໃຫ້ proxies={} ກັບ send ຈະຂ້າມສາຂາຫາຄ່ານັ້ນໂດຍສະເພາະ.
Dictionary ວ່າງທີ່ໃຫ້ merge_environment_settings ມີໜ້າທີ່ຕ່າງກັນ: ການລວມສາມາດເຕີມເສັ້ນທາງຈາກສະພາບແວດລ້ອມກ່ອນສົ່ງໃຫ້ send. ເບິ່ງແຕ່ dictionary ວ່າງໃນໂຄດສອງອັນຈະພາດວິທີຮັບທີ່ບໍ່ຄືກັນ.
ໃນໂຄດສ້າງຄຳຂໍເອງ ໃຫ້ຮັກສາການກຽມ, ການລວມ ແລະ ການສົ່ງຢູ່ນຳກັນ. ເມື່ອແອັບໃຊ້ trust_env=False ໂດຍຕັ້ງໃຈ ການລວມຈະເຄົາລົບນະໂຍບາຍນັ້ນ; ບໍ່ໄດ້ບັງຄັບຄ່າໃສ່ໄຄລເອັນທີ່ປິດມັນເອງ.