2

アプリケーションでプロキシ サポートを使用しています。これは、wifi 設定パネルに入力された手動プロキシに対しては正常に機能しますが、その特定の Wifi 接続の HTTP プロキシ セクションの「自動」オプションに自動プロキシ pac ファイルを配置すると機能しません。

情報は PAC ファイルに含まれていないため動的です。iOS アプリケーションでプロキシ情報用に pac ファイルを使用するにはどうすればよいですか?

4

1 に答える 1

1

Objective C を使用している場合は、プロキシの詳細を取得するために次のスニペットを参照できます ( kCFNetworkProxiesProxyAutoConfigURLStringを使用します)。

 CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings();
//Manual Proxy Details
const NSString* proxyStr = (const NSString*)CFDictionaryGetValue(dicRef, (const void*)kCFNetworkProxiesHTTPProxy);

//Auto Config Proxy Details
NSString* proxyStr2 = ( NSString*)CFDictionaryGetValue(dicRef, (const void*)kCFNetworkProxiesProxyAutoConfigURLString);
// Return something similar to http://someIPAddress:someport/pacfile

if (proxyStr2 != nil)
{
    NSLog(@"Proxy %@", proxyStr2);
    // Create an url with the proxy pac
    NSURL *url = [NSURL URLWithString:proxyStr2];
    if (url != nil)
    {
        NSString* urlPath = [url path];
        // Url path: /pacfile
        NSLog(@"Url %@", urlPath);
        NSError* error;

        // Go fetch the content the url (PAC Content)
        NSString *content = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error];

        if (content == nil)
        {
            NSLog(@"StringWithContentsOfUrl Error: %@", error);
        }

        if (content != nil)
        {
            NSLog(@"PAC content: %@", content);

            // Parsing of the pac file. This is just a sample parsing script and may change based on what your PAC returns
            NSUInteger firstMatch = [content rangeOfString:@"PROXY "].location + 6;
            NSUInteger secondMatch = [content rangeOfString:@"\"" options:0 range:NSMakeRange(firstMatch , [content length] - firstMatch)].location;

            if (firstMatch < 10000 && secondMatch < 10000 && firstMatch > 0 && secondMatch > 0)
            {
               //Just a random label
                self.randLabel3.text=[NSString stringWithFormat: @"First match and second match: %tu %tu", firstMatch, secondMatch];

            }
        }
    }
}
于 2018-07-22T19:52:00.777 に答える