DefaultTransport มาตรฐานของ Go ตั้งค่า Proxy เป็น ProxyFromEnvironment แต่ &http.Transport{} ที่สร้างแยกต่างหากมีฟังก์ชัน Proxy เป็น nil จึงไม่เลือกพร็อกซีใด ๆ

ความแตกต่างนี้อาจปรากฏขึ้นหลังจากเพิ่ม transport เพื่อเปลี่ยนเวลาหมดอายุเพียงอย่างเดียว ขณะที่ค่าเริ่มต้นมาตรฐานยังติดตั้งอยู่ ให้โคลนมันและเปลี่ยนฟิลด์ที่คุณต้องการ:

transport := http.DefaultTransport.(*http.Transport).Clone()
transport.ResponseHeaderTimeout = 15 * time.Second

client := &http.Client{
    Transport: transport,
    Timeout: 30 * time.Second,
}

โคลนจะรักษาการเลือกพร็อกซีจากสภาพแวดล้อมและการตั้งค่า transport เริ่มต้นอื่น ๆ การยืนยันชนิดถือว่าแอปพลิเคชันไม่ได้แทนที่ DefaultTransport ด้วย RoundTripper อื่น

สำหรับ transport ที่สร้างขึ้นจากศูนย์โดยเจตนา ให้ตั้งค่า Proxy: http.ProxyFromEnvironment อย่างชัดเจนเมื่อนั่นคือแนวนโยบายการกำหนดเส้นทาง ฟังก์ชัน ProxyURL ที่ชัดเจนแสดงแนวนโยบายที่ต่างออกไป: ตัวกลางหนึ่งตัวที่เลือกไว้

กำหนดค่า transport ก่อนที่คำขอแบบพร้อมกันจะใช้งาน จากนั้นใช้ซ้ำสำหรับภาระงาน การเปลี่ยนออบเจ็กต์เริ่มต้นที่แชร์กันอาจส่งผลต่อไคลเอนต์ที่ไม่เกี่ยวข้อง

การตั้งค่า TLS แบบกำหนดเองแยกต่างหาก ไม่จำเป็นต้องปิดการตรวจสอบใบรับรองเพื่อรักษาการค้นหาพร็อกซี และจะเปลี่ยนความปลอดภัยของทุกคำขอ HTTPS ที่ตรงกัน

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