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