【问题标题】:How to parse a PAC file on iOS如何在 iOS 上解析 PAC 文件
【发布时间】:2014-09-03 13:38:33
【问题描述】:

所以我正在尝试在 iOS 设备上获取代理信息。操作系统方便地使用函数 CFNetworkCopySystemProxySettings() 来获取设置的字典。当提供主机和端口时,我没有问题,我可以分别使用 kCFNetworkProxiesHTTPProxy 和 kCFNetworkProxiesHTTPPort 键在字典中访问它们。但是,有时不提供这些,而是​​为 kCFNetworkProxiesProxyAutoConfigURLString 键提供 URL。现在这就是我遇到问题的地方......

所以我拉出文件,其中包含预期的 javascript 函数:

function FindProxyForURL(url,host)

{
    if (isInNet(host, "10.xxx.xxx.xxx", "255.255.224.0"))        
    {                                               
    return "DIRECT";                                
    }
        if (isInNet(host, "10.xxx.xxx.xxx", "255.255.224.0"))  
    {                                               
    return "DIRECT";                                
    }
return "PROXY host:port";   
}

我觉得哪个都不错..?

然后,我尝试调用函数并获取返回值,这就是出错的地方:(这是我最近的尝试:

NSString *jsFunction = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // jsFunction is the javascript function above
JSContext *context=  [[JSContext alloc] init];
[context evaluateScript:jsFunction];
JSValue *function = context[@"FindProxyForURL"];
JSValue *jsResult = [function callWithArguments:@[[JSValue valueWithObject:[NSString stringWithCppString:host] inContext:context], [JSValue valueWithObject:[NSString stringWithCppString:host] inContext:context]]];
NSString *result = [jsResult toString];

结果总是以未定义的形式返回!!

我已经尝试了一些测试函数来代替 PAC,它们只是增加数字并且它们按预期工作,当我引入对 isInNet 的调用时,问题似乎开始了。有没有人有类似的问题? iOS 不支持 isInNet 吗?我是不是做错了什么?

感谢您提供的任何帮助!

【问题讨论】:

    标签: javascript ios pac


    【解决方案1】:

    问题是isInNet(或任何其他可能使用的 PAC 函数)没有定义;它们不是标准的 Javascript 函数。您是否尝试过像CFNetworkCopyProxiesForAutoConfigurationScript 这样更直接的方法?

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多