คำขออาจทำงานผ่าน 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 การรวมค่าจะเคารพนโยบายนั้น ไม่บังคับค่าสภาพแวดล้อมให้ไคลเอนต์ที่ตั้งใจปิดมัน

บทความที่เกี่ยวข้อง