2007年8月17日金曜日

で,どうやってシステム環境設定のHTTPプロキシ情報を得るか

まぁ卵と鶏の関係なのだが上手くいくなら以下の方法で情報が取れるはず.

[[NSURL URLWithString:@"http://www.apple.com/" propertyForKey:NSHTTPPropertyHTTPProxy];

でもこれが動くならそんな値(情報)必要としないとも言える.

で以下がやるべきこと

//SystemConfiguration.frameworkを追加
//includeなりimportで次のheaderを読込む<SystemConfiguration/SystemConfiguration.h>

CFDictionaryRef proxyDict = SCDynamicStoreCopyProxies(NULL);
CFNumberRef enableNum = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPEnable);
CFStringRef hostStr = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPProxy);
CFNumberRef portNum = (CFNumberRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPPort);

だということです.CFxxx系は不勉強で良く知りません.

が,CFStringRef, CFNumberRefはNSStringのように扱えちゃいました.
そこで以下のような方法でHTTP Proxyを設定してみました.

CFDictionaryRef proxyDict = SCDynamicStoreCopyProxies(NULL);
CFNumberRef enableNum = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPEnable);
if ([enableNum intValue]==1) {
CFStringRef hostStr = (CFStringRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPProxy);
CFNumberRef portNum = (CFNumberRef) CFDictionaryGetValue(proxyDict, kSCPropNetProxiesHTTPPort);
NSString* proxyURLStr= [NSString stringWithFormat:@"http://%@:%@", hostStr, portNum];
NSURL* proxyURL = [NSURL URLWithString:proxyURLStr];

WSMethodInvocationSetProperty(ref, kWSHTTPProxy, proxyURL);
}

もっと賢い方法や正しい方法があったら教えてやってください.

#2007/08/30 kSCPropNetProxiesHTTPEnableにてproxyを使うかどうかに変更

とりあえず目的達成.

参考
ttp://developer.apple.com/jp/qa/qa2001/qa1234.html

0 件のコメント: