从 PAC 文件获取数据
是否可以从 .Net Windows 应用程序执行 PAC 文件中的 Javascript 以返回代理服务器?
Is it possible to execute the Javascript in a PAC file from a .Net windows application to return the proxy server?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 代理自动配置文件 只是一个 JavaScript 源文件,您需要调用其中的方法,您可以使用 JScript .NET 编译器(可通过 JScriptCodeProvider)和/或解释器(通过 JScriptEvaluate)。
编译器:以下是将 JScript .NET 代码编译为类,然后调用该类上的方法的示例代码,这可能很适合您正在寻找的内容。请注意,它使用反射,因此如果您处于像 ASP.NET 这样的部分信任环境中,它可能会给您带来麻烦。我不确定这种访问是否需要反射,或者它是否只是一个实现细节;如果这对您来说是个问题,您可以进一步研究,或者您可以使用口译员。
解释器:这是一个使用 Microsoft.JScript.Eval.JScriptEvaluate 解释 JScript 代码的示例。由于您的 PAC 文件正在定义一个或多个函数,因此它不会返回任何有用的内容。您需要在末尾添加一行,使用您想要的参数调用 FindProxyForURL;然后你可以评估整个字符串并得到你的结果。或者您可以评估 PAC 文件,该文件将声明该函数,然后您可以评估对该函数的调用(我没有使用 JScriptEvaluate,所以我不知道全局变量是否从一个调用延续到下一个调用) )。
Since a proxy auto-config file is just a JavaScript source file, and you need to call a method in it, you could use the JScript .NET compiler (available in code via the JScriptCodeProvider) and/or interpreter (via JScriptEvaluate).
Compiler: Here's sample code to compile JScript .NET code to a class, and then call a method on that class, which might be a good fit for what you're looking for. Note that it uses Reflection, so it might give you troubles if you're in a partial-trust environment like ASP.NET. I'm not sure whether the Reflection is required for this kind of access, or if it's just an implementation detail; if that's an issue for you, you could research it further, or you could use the interpreter instead.
Interpreter: Here's an example that interprets JScript code using Microsoft.JScript.Eval.JScriptEvaluate. Since your PAC file is defining one or more functions, it won't return anything useful. You would need to append a line at the end that calls FindProxyForURL with the arguments you want; then you could evaluate that entire string and get your result. Or it's possible that you could eval the PAC file, which would declare the function, and then you could eval a call to that function (I haven't used JScriptEvaluate so I don't know whether globals carry over from one call to the next).