ใช้ 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 อาจหมายถึงงานอื่นครองการเชื่อมต่อที่มีอยู่ ปิดไคลเอนต์และคำตอบแบบสตรีมให้ถูกต้องก่อนสรุปว่าเป็นหลักฐานว่าพร็อกซีเข้าไม่ถึง

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