Nodejs中请求库request中no_proxy不生效

2020-07-28  本文已影响0人  小人物_b

1、使用 echo $no_proxy 命令查看设置环境变量,发现no_proxy 已经设置了

sh-4.2# echo $no_proxy
"localhost,127.0.0.1,10.143.253.,.corp,10.143.253.218"
sh-4.2#

2、查看request源码
request -->lib -->getProxyFromURI.js
具体解释请看下面源码的注释

function formatHostname (hostname) {
    //这里的正则有问题,如果hostname没有以.开始,所有的返回都会被加上'.'
  return hostname.replace(/^\.*/, '.').toLowerCase()
}

function parseNoProxyZone (zone) {
  zone = zone.trim().toLowerCase()

  var zoneParts = zone.split(':', 2)
  //这里的zoneHost 都会以.开始
  var zoneHost = formatHostname(zoneParts[0]) 
  var zonePort = zoneParts[1]
  var hasPort = zone.indexOf(':') > -1

  return {hostname: zoneHost, port: zonePort, hasPort: hasPort}
}

function uriInNoProxy (uri, noProxy) {
  var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
  var hostname = formatHostname(uri.hostname)
  var noProxyList = noProxy.split(',')

  return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {
    // noProxyZone.hostname 都是以.开始的,所有如果我们no_proxy中的设置没有以'.'开始,isMatchedAt都会是false!!!所以no_proxy都不会生效
    var isMatchedAt = hostname.indexOf(noProxyZone.hostname)
    var hostnameMatched = (
      isMatchedAt > -1 &&
        (isMatchedAt === hostname.length - noProxyZone.hostname.length)
    )

    if (noProxyZone.hasPort) {
      return (port === noProxyZone.port) && hostnameMatched
    }

    return hostnameMatched
  })
}
上一篇下一篇

猜你喜欢

热点阅读