พร็อกซี Session ใน Python Requests และลำดับความสำคัญของสภาพแวดล้อม
ทำให้เส้นทางของ Python Requests คาดการณ์ได้เมื่อ session.proxies ตัวแปรสภาพแวดล้อม ค่ารายคำขอ และ trust_env ทำงานร่วมกัน
หาก session.proxies ชี้ไปที่เอนด์พอยต์หนึ่ง แต่สคริปต์ใช้พร็อกซีของเชลล์ การกำหนดดิกชันนารีเดิมซ้ำไม่แก้ความขัดแย้ง Requests อาจรวมค่าพร็อกซีจากสภาพแวดล้อมโดยให้ความสำคัญเหนือค่าเริ่มต้นของ Session จึงต้องเลือกว่าจะให้ Session ค้นหาค่าจากสภาพแวดล้อมต่อหรือไม่
คงการค้นหาจากสภาพแวดล้อม และระบุเส้นทางในคำขอ
ส่งค่าที่ชัดเจนให้การเรียกแต่ละครั้ง ตามที่ Requests แนะนำเพื่อเลี่ยงความขัดแย้งระหว่าง Session กับสภาพแวดล้อมนี้:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
เปลี่ยนตัวรับฟังภายในเครื่องเป็นของคุณ หากเปรียบเทียบเอนด์พอยต์ HTTP สาธารณะ ให้เลือกจากรายการพร็อกซี HTTP โดยคงนโยบาย Session ไว้ สิ่งนี้ควบคุมรายการในแมปที่ส่งให้ ต้องเลือกอย่างตั้งใจสำหรับสคีมหรือโฮสต์อื่นที่แอปใช้ด้วย บริการ IDE คอนเทนเนอร์ หรือ CI runner อาจรับสภาพแวดล้อมที่ต่างจากเทอร์มินัล
ให้ Session ควบคุมค่าของตนเอง
หากแอปไม่ควรค้นหาพร็อกซีจากสภาพแวดล้อม ให้กำหนดนโยบายก่อนคำขอแรก:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False ยังมีผลต่อค่าใบรับรองที่เกี่ยวข้องกับสภาพแวดล้อมและการยืนยันตัวตน netrc อัตโนมัติ พิจารณาการพึ่งพาเหล่านี้ก่อนเลือกใช้ สำหรับชุดใบรับรอง CA ส่วนตัวที่อนุมัติแล้ว สามารถส่งพาธอย่างชัดเจนได้:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
ใช้ชุดที่ได้รับอนุมัติจริงและเปิดการตรวจสอบไว้ แยก Session สำหรับแต่ละนโยบายเส้นทาง แทนการแก้ Session เดียวขณะที่งานอื่นกำลังใช้
หากทั้งสองวิธียังอธิบายเส้นทางแอปไม่ได้ ให้เปรียบเทียบ Session ที่แยกเดี่ยวกับแอป โดยใช้สภาพแวดล้อมรันและปลายทางที่ไม่เป็นอันตรายเดียวกัน บันทึกว่ามีตัวแปรพร็อกซีใด ค่า trust_env และการเรียกส่ง proxies หรือไม่ ห้ามเก็บ URL ที่มีข้อมูลรับรองในบันทึกที่แบ่งปัน หากแบบแยกเดี่ยวสำเร็จ ให้ตรวจการสร้าง Session อะแดปเตอร์ ขั้นตอนคำขอที่เตรียมไว้ หรือชั้นขนส่งที่กำหนดเองต่อ การทดสอบสภาพแวดล้อมด้วย curl ไม่อาจชี้ขาดพฤติกรรมรวมค่าของ Requests เองได้