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

时间:2016-05-18 02:56:01

标签: node.js proxy http-proxy

我正在尝试编写一个节点程序(欢迎使用其他语言的建议),它可以解析并运行公司代理脚本PAC并返回相应的代理服务器以便以编程方式使用。

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

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

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

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

任何提示都非常感激。

1 个答案:

答案 0 :(得分:2)

如果您坚持使用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
  • myIpAddress
  • dnsResolve
  • isPlainHostName
  • localHostOrDomainIs
  • isResolvable
  • dnsDomainLevels
  • weekdayRange
  • DATERANGE
  • TIMERANGE
  • 警报