OSX에서 WPAD를 사용하여 PAC 스크립트를 검색하려면 어떻게합니까? "http : //wpad/wpad.dat"의 내용을 가져와 DNS에 "wpad"가이 규칙에 맞게 미리 설정되기를 바라는 것으로 충분합니까?OSX에서 WPAD를 사용하여 PAC 스크립트 검색
이 작업을 수행하는 데 더 "공식적인"방법이 있습니까?
OSX에서 WPAD를 사용하여 PAC 스크립트를 검색하려면 어떻게합니까? "http : //wpad/wpad.dat"의 내용을 가져와 DNS에 "wpad"가이 규칙에 맞게 미리 설정되기를 바라는 것으로 충분합니까?OSX에서 WPAD를 사용하여 PAC 스크립트 검색
이 작업을 수행하는 데 더 "공식적인"방법이 있습니까?
가 특정 URL에 대한 PAC 프록시를 받으시는 방법 : 간단하게하기 위해서
#import <Foundation/Foundation.h>
#import <CoreServices/CoreServices.h>
#import <SystemConfiguration/SystemConfiguration.h>
CFArrayRef CopyPACProxiesForURL(CFURLRef targetURL, CFErrorRef *error)
{
CFDictionaryRef proxies = SCDynamicStoreCopyProxies(NULL);
if (!proxies)
return NULL;
CFNumberRef pacEnabled;
if ((pacEnabled = (CFNumberRef)CFDictionaryGetValue(proxies, kSCPropNetProxiesProxyAutoConfigEnable)))
{
int enabled;
if (CFNumberGetValue(pacEnabled, kCFNumberIntType, &enabled) && enabled)
{
CFStringRef pacLocation = (CFStringRef)CFDictionaryGetValue(proxies, kSCPropNetProxiesProxyAutoConfigURLString);
CFURLRef pacUrl = CFURLCreateWithString(kCFAllocatorDefault, pacLocation, NULL);
CFDataRef pacData;
SInt32 errorCode;
if (!CFURLCreateDataAndPropertiesFromResource(kCFAllocatorDefault, pacUrl, &pacData, NULL, NULL, &errorCode))
return NULL;
CFStringRef pacScript = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, pacData, kCFStringEncodingISOLatin1);
if (!pacScript)
return NULL;
CFArrayRef pacProxies = CFNetworkCopyProxiesForAutoConfigurationScript(pacScript, targetURL, error);
return pacProxies;
}
}
return NULL;
}
int main(int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CFURLRef targetURL = (CFURLRef)[NSURL URLWithString : @"http://stackoverflow.com/questions/4379156/retrieve-pac-script-using-wpad-on-osx/"];
CFErrorRef error = NULL;
CFArrayRef proxies = CopyPACProxiesForURL(targetURL, &error);
if (proxies)
{
for (CFIndex i = 0; i < CFArrayGetCount(proxies); i++)
{
CFDictionaryRef proxy = CFArrayGetValueAtIndex(proxies, i);
NSLog(@"%d\n%@", i, [(id)proxy description]);
}
CFRelease(proxies);
}
[pool drain];
}
,이 코드는 누수로 가득하다 (당신은 당신이 복사을 가지고 모든 것을 해제해야하고 만들기 함수)를 호출하고 잠재적 오류를 처리하지 않습니다.
준수 내용은 WPAD draft의 8 항을 참조하십시오. DNS 만 사용하면 "최소 준수"가됩니다.
완벽하게 준수하려면 DNS를 사용하기 전에 호스트가 DHCP에서 WPAD 구성을 받았는지 확인해야합니다. 시스템 구성 프레임 워크를 사용하여 호스트가 DHCP 서버에서 옵션 252 매개 변수를 수신했는지 확인해야합니다.
편집 : 사실, system configuration framework에서 직접 WPAD URL을 얻을 수 있습니다. kSCPropNetProxiesProxyAutoConfigEnable
에 관심이있는 것으로 보입니다. 1
으로 설정되어 있으면 WPAD URL은 kSCPropNetProxiesProxyAutoConfigURLString
이어야합니다. 여기