npm的NodeJS请求模块出现问题,它拒绝与具有自签名证书的服务器通信。当我运行以下代码时:
const url = require('url');
const https = require('https');
const request = require('request-promise-native');
const rawRequest = (method, uri) => {
return new Promise((resolve, reject) => {
const options = url.parse(uri);
options.method = method;
options.rejectUnauthorized = false;
const req = https.request(options, (res) => {
let body = '';
res.on('data', (data) => {
body += data;
});
res.on('end', () => {
resolve(body);
})
});
req.on('error', reject);
req.end();
});
}
rawRequest('GET', 'https://XXX.XXX.XXX.XXX:XXXX/v1/')
.then((res) => {
console.log('[rawRequest-SUCCESS]');
})
.catch((error) => {
console.error('[rawRequest-ERROR]', error.message);
});
request({
method: 'GET',
url: 'https://XXX.XXX.XXX.XXX:XXXX/v1/',
rejectUnauthorized: false
})
.then((res) => {
console.log('[request-SUCCESS]');
})
.catch((error) => {
console.error('[request-ERROR]', error.message);
});
我得到以下结果:
[rawRequest-SUCCESS]
[request-ERROR] Error: tunneling socket could not be established, statusCode=403
我尝试了多种配置请求调用的方法,包括在各种配置中使用agent
和agentOptions
,包括strictSSL
,rejectUnathorized
。我什至在通话开始之前都没有加process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
。
为什么原始请求在请求库不起作用的地方工作?