Evaluați URL-urile PAC returnate de CFNetworkCopyProxiesForURL
Transformați rezultatele configurării automate a proxy-ului din CFNetwork în rute specifice destinației, fără a confunda adresa PAC cu punctul final al proxy-ului.
Aplicația dvs. întreabă CFNetwork cum să ajungă la un site și primește un URL care se termină în .pac. Punerea acelui nume de gazdă în conexiunea socket este o cale greșită: el identifică un script de configurare.
CFNetworkCopyProxiesForURL returnează o matrice ordonată de dicționare pentru URL-ul țintă. Inspectați kCFProxyTypeKey înainte de a citi câmpurile punctului final. Un dicționar de tipul kCFProxyTypeAutoConfigurationURL furnizează kCFProxyAutoConfigurationURLKey, care necesită încă un pas de evaluare.
- Obțineți setările curente de proxy ale sistemului și solicitați rute către URL-ul de destinație real.
- Când un rezultat face referire la un URL PAC, evaluați acel script pentru aceeași destinație.
- Citiți tipurile și punctele finale ale candidaților rezultați. Un proxy HTTP, un proxy SOCKS și o rută directă necesită o tratare diferită a conexiunii.
- Păstrați ordinea candidaților atunci când aplicați comportamentul permis de eșec și de rezervă.
CFNetworkExecuteProxyAutoConfigurationURL descarcă și evaluează scriptul în mod asincron. Valoarea sa de returnare imediată este o sursă run loop. Programați acea sursă; apelul invers furnizează rezultatul evaluării sau eroarea după finalizarea lucrării. Crearea sursei și citirea imediată a unei variabile de rezultat goale nu așteaptă nimic. Invalidați sursa dacă operația trebuie anulată.
Păstrați URL-ul țintă atașat căutării. Un script PAC poate alege rute diferite pentru două gazde, așa că stocarea unui singur proxy rezolvat ca răspuns pentru fiecare destinație ulterioară schimbă politica scriptului. În mod similar, un candidat direct este o rută explicită, nu un nume de gazdă de proxy lipsă.
Aceste API-uri sunt utile atunci când un transport personalizat trebuie să interpreteze setările sistemului. Ele nu implementează protocolul de proxy ulterior pentru acel transport, iar căutarea nu preia parole din Keychain. Pe macOS, potriviți separat acreditarea proxy în Keychain.