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 หาพร็อกซีเริ่มต้นเมื่อไม่มีอาร์กิวเมนต์ชื่อ proxies การให้ proxies={} แก่ send จะข้ามสาขาหาค่าเริ่มต้นนั้นโดยเฉพาะ
ดิกชันนารีว่างที่ให้ merge_environment_settings มีอีกหน้าที่ การรวมค่าอาจเติมเส้นทางสภาพแวดล้อมที่เกี่ยวข้องก่อนส่งต่อให้ send การดูแค่ว่ามีดิกชันนารีว่างในสองตัวอย่างทำให้พลาดว่าเมธอดที่รับต่างกัน
ในโค้ดสร้างคำขอเอง ให้การเตรียม การรวมสภาพแวดล้อม และการส่งอยู่ด้วยกัน เมื่อแอปตั้งใจใช้ trust_env=False การรวมค่าจะเคารพนโยบายนั้น ไม่บังคับค่าสภาพแวดล้อมให้ไคลเอนต์ที่ตั้งใจปิดมัน