美文网首页
Nodejs中请求库request中no_proxy不生效

Nodejs中请求库request中no_proxy不生效

作者: 小人物_b | 来源:发表于2020-07-28 15:44 被阅读0次

    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
      })
    }
    

    相关文章

      网友评论

          本文标题:Nodejs中请求库request中no_proxy不生效

          本文链接:https://www.haomeiwen.com/subject/frifrktx.html