如何在 Node 中 运行 PAC 代理脚本?

How to run a PAC proxy script in Node?

我正在尝试编写一个可以解析和 运行 公司代理脚本 PAC 和 return 适当的代理服务器以编程方式使用的节点程序(欢迎提出其他语言的建议)。

是否有任何现有的解决方案可以做到这一点? (或者这只能通过浏览器实现)

似乎 PAC 文件假定某些全局函数存在于执行上下文中,例如

shExpMatch()
myIpAddress() // interestingly the nodejs ip package return the true LAN DHCP assigned IP instead of a VPN IP

目标是每次启动 shell 时解析正确的代理服务器(如果不在代理后面,则根本不设置)

非常感谢任何提示。

如果您坚持使用 Node,我建议您为此使用 pac-resolver 之类的东西。

const pac = require('pac-resolver');
const fetch = require('node-fetch');
const ip = require('ip');

fetch('http://<proxy_host>:<proxy_port>')
  .then(res => res.text())
  .then(body => {
    // to handle a bug when pinging 8.8.8.8 will time out
    // see: https://github.com/TooTallNate/node-pac-resolver/issues/18
    findProxy = pac(body, { sandbox: { myIpAddress: ip.address }, });
    return findProxy('http://google.com/'));
  })
  .then(proxy => console.log(proxy))
  .catch(err => console.error(err));

无论如何,您可以查看 the repo 以了解需要定义哪些全局函数以及如何在 JavaScript 中完成。

如果你可以使用其他语言,请查看pacparser

顺便说一句,标准全局函数列表是here:

  • dnsDomainIs
  • shExpMatch
  • isInNet
  • 我的 IP 地址
  • dnsResolve
  • isPlainHostName
  • localHostOrDomainIs
  • 可解析
  • dnsDomainLevels
  • 工作日范围
  • 日期范围
  • 时间范围
  • 警报