如何在iOS上解析PAC文件

How to parse a PAC file on iOS

本文关键字:PAC 文件 iOS      更新时间:2023-09-26

所以我试图在iOS设备上获取代理信息。操作系统方便地使用函数CFNetworkCopySystemProxySettings()来获取设置的字典。当提供主机和端口时,我没有问题,我可以分别使用kCFNetworkProxiesHTTPProxy和kCFNetworkProxy HTTPPort键访问字典中的主机和端口。但是,有时不提供这些,而是为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吗?我是不是做错了什么?

谢谢你能提供的任何帮助!

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