เลือกเส้นทางพร็อกซี HTTPX ด้วย proxy และ mounts
ใช้ proxy และการผูก transport ของ HTTPX ด้วยสคีมที่ถูกต้อง กำหนดการใช้สภาพแวดล้อมให้ชัด และแยกเวลารอเชื่อมต่อกับอ่านข้อมูล
ใช้ proxy= เมื่อเอนด์พอยต์เดียวต้องจัดการคำขอของไคลเอนต์ ใช้ mounts= เมื่อสคีมปลายทางต้องการคนละเส้นทาง ตัวอย่างใช้สองอินเทอร์เฟซนี้ของ HTTPX โครงการที่ใช้ API เก่า proxies= ต้องตั้งค่าให้ตรงกับรุ่นนั้น
เอนด์พอยต์เดียว
import httpx
timeout = httpx.Timeout(15.0, connect=5.0)
with httpx.Client(
proxy="http://127.0.0.1:8080",
trust_env=False,
timeout=timeout,
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
แทนลิสเทนเนอร์ในเครื่องด้วยพร็อกซี HTTP ที่ทำงานอยู่ ตัวเลือกจากรายการพร็อกซี HTTPยังต้องทดสอบกับปลายทางของคุณ เป้าหมาย HTTPS ใช้เอนด์พอยต์ http:// นี้ผ่าน CONNECT ได้ การเปลี่ยนสคีมเป็น https:// กลับเป็นการขอ TLS ถึงตัวพร็อกซี ซึ่งทั้งไคลเอนต์และลิสเทนเนอร์ต้องรองรับ
แยกเส้นทางตามสคีมปลายทาง
import httpx
mounts = {
"http://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8080",
trust_env=False,
),
"https://": httpx.HTTPTransport(
proxy="http://127.0.0.1:8081",
trust_env=False,
),
}
with httpx.Client(
mounts=mounts,
trust_env=False,
timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
response = client.get("https://example.com/")
response.raise_for_status()
print(response.status_code)
คีย์ mount จับคู่กับ URL ปลายทาง ในตัวอย่าง เป้าหมาย HTTP เลือกพอร์ต 8080 และ HTTPS เลือก 8081 ค่าพร็อกซีอธิบายโปรโตคอลของลิสเทนเนอร์เอง ดังนั้น mount ของ HTTPS จึงใส่พร็อกซี http:// ได้อย่างถูกต้อง เปลี่ยนเป็นเอนด์พอยต์ของคุณแล้วตรวจทั้งสองสคีมปลายทาง
ทั้งสองวิธีตั้ง trust_env=False ที่ไคลเอนต์ และที่ transport เมื่อมีการส่งเข้ามา หากไม่ตั้ง HTTPX จะอ่านตัวแปรสภาพแวดล้อมของพร็อกซีและใบรับรองโดยปริยาย หากระบบใช้งานต้องพึ่งตัวแปรเหล่านั้น ให้เปิดการค้นหาไว้หรือตั้งเส้นทางและความเชื่อถือให้ชัด ใช้ TLS context และการตั้งค่า CA ที่รุ่น HTTPX รองรับสำหรับความเชื่อถือส่วนตัว และเปิดการตรวจสอบปลายทางไว้ ความเชื่อถือพร็อกซี HTTPS อาจแยกจากปลายทางได้
httpx.Timeout(15.0, connect=5.0) เขียนทับเวลาเชื่อมต่อ และกำหนดส่วนเวลารออื่นที่ตั้งค่าไว้จากค่าเริ่มต้น การอ่าน เขียน และรอ pool มีเวลาจำกัดแยกกัน สิบห้าวินาทีไม่ใช่เส้นตายรวมของเวลาที่ผ่านไปจริง Pool timeout อาจหมายถึงงานอื่นครองการเชื่อมต่อที่มีอยู่ ปิดไคลเอนต์และคำตอบแบบสตรีมให้ถูกต้องก่อนสรุปว่าเป็นหลักฐานว่าพร็อกซีเข้าไม่ถึง