Evaluasi URL PAC yang Dikembalikan CFNetworkCopyProxiesForURL
Ubah hasil konfigurasi proxy otomatis CFNetwork menjadi rute khusus tujuan tanpa mengira alamat PAC sebagai titik akhir proxy.
Aplikasi Anda bertanya kepada CFNetwork cara mencapai sebuah situs web dan menerima URL yang berakhiran .pac. Menempatkan nama host itu ke dalam koneksi socket adalah langkah yang salah: nama itu mengidentifikasi skrip konfigurasi.
CFNetworkCopyProxiesForURL mengembalikan larik kamus yang terurut untuk URL tujuan. Periksa kCFProxyTypeKey sebelum membaca bidang titik akhir. Kamus bertipe kCFProxyTypeAutoConfigurationURL menyediakan kCFProxyAutoConfigurationURLKey, yang memerlukan langkah evaluasi lain.
- Dapatkan pengaturan proxy sistem saat ini dan minta rute ke URL tujuan yang sebenarnya.
- Ketika hasil merujuk ke URL PAC, evaluasi skrip itu untuk tujuan yang sama.
- Baca jenis dan titik akhir kandidat yang dihasilkan. Proxy HTTP, proxy SOCKS, dan rute langsung memerlukan penanganan koneksi yang berbeda.
- Pertahankan urutan kandidat saat menerapkan perilaku kegagalan dan cadangan yang diizinkan.
CFNetworkExecuteProxyAutoConfigurationURL mengunduh dan mengevaluasi skrip secara asinkron. Nilai kembaliannya yang segera adalah sumber run loop. Jadwalkan sumber itu; callback memberikan hasil evaluasi atau galat setelah pekerjaan selesai. Membuat sumber lalu langsung membaca variabel hasil yang kosong tidak menunggu apa pun. Batalkan sumber jika operasi harus dibatalkan.
Pertahankan URL tujuan tetap melekat pada pencarian. Skrip PAC dapat memilih rute berbeda untuk dua host, jadi menyimpan satu proxy yang sudah diselesaikan sebagai jawaban untuk setiap tujuan berikutnya mengubah kebijakan skrip. Demikian pula, kandidat langsung adalah rute eksplisit, bukan nama host proxy yang hilang.
API ini berguna ketika lapisan transport khusus harus menafsirkan pengaturan sistem. API ini tidak menerapkan protokol proxy berikutnya untuk transport tersebut, dan pencarian tidak mengambil kata sandi dari Keychain. Di macOS, cocokkan kredensial proxy di Keychain secara terpisah.