แอปของคุณถาม CFNetwork ว่าจะไปถึงเว็บไซต์ได้อย่างไร แล้วได้รับ URL ที่ลงท้ายด้วย .pac การใส่ชื่อโฮสต์นั้นลงในการเชื่อมต่อ socket เป็นทางที่ผิด: มันระบุสคริปต์การกำหนดค่า

CFNetworkCopyProxiesForURL ส่งคืนอาร์เรย์ที่มีลำดับของพจนานุกรมสำหรับ URL เป้าหมาย ตรวจสอบ kCFProxyTypeKey ก่อนอ่านฟิลด์ปลายทาง พจนานุกรมชนิด kCFProxyTypeAutoConfigurationURL ให้ kCFProxyAutoConfigurationURLKey ซึ่งต้องมีขั้นตอนการประเมินอีกขั้น

  1. รับการตั้งค่าพร็อกซีปัจจุบันของระบบและขอเส้นทางไปยัง URL ปลายทางจริง
  2. เมื่อผลลัพธ์อ้างถึง URL ของ PAC ให้ประเมินสคริปต์นั้นสำหรับปลายทางเดียวกัน
  3. อ่านชนิดและปลายทางของผู้สมัครที่ได้ พร็อกซี HTTP พร็อกซี SOCKS และเส้นทางตรงต้องมีการจัดการการเชื่อมต่อที่ต่างกัน
  4. รักษาลำดับของผู้สมัครเมื่อใช้พฤติกรรมการล้มเหลวและการสำรองที่ได้รับอนุญาต

CFNetworkExecuteProxyAutoConfigurationURL ดาวน์โหลดและประเมินสคริปต์แบบอะซิงโครนัส ค่าที่ส่งคืนทันทีคือแหล่ง run loop กำหนดเวลาแหล่งนั้น callback จะให้ผลการประเมินหรือข้อผิดพลาดเมื่อทำงานเสร็จ การสร้างแหล่งแล้วอ่านตัวแปรผลลัพธ์ว่างทันทีไม่ได้รอสิ่งใดเลย ทำให้แหล่งไม่ถูกต้องหากต้องยกเลิกการดำเนินการ

เก็บ URL เป้าหมายให้ผูกกับการค้นหา สคริปต์ PAC สามารถเลือกเส้นทางที่ต่างกันสำหรับสองโฮสต์ ดังนั้นการเก็บพร็อกซีที่แก้ไขแล้วเพียงตัวเดียวเป็นคำตอบสำหรับทุกปลายทางถัดไปจึงเปลี่ยนนโยบายของสคริปต์ ในทำนองเดียวกัน ผู้สมัครแบบตรงเป็นเส้นทางที่ชัดเจน ไม่ใช่ชื่อโฮสต์พร็อกซีที่หายไป

API เหล่านี้มีประโยชน์เมื่อทรานสปอร์ตที่กำหนดเองต้องตีความการตั้งค่าระบบ พวกมันไม่ได้ใช้โปรโตคอลพร็อกซีถัดไปสำหรับทรานสปอร์ตนั้น และการค้นหาไม่ได้ดึงรหัสผ่านจาก Keychain บน macOS จับคู่ข้อมูลรับรองพร็อกซีใน Keychain แยกต่างหาก

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