我目前在node.js中使用request来进行HTTP请求。曾经遇到过一个问题,错误提示为 UNABLE_TO_GET_ISSUER_CERT_LOCALLY。为了绕过这个问题,我设置了rejectUnauthorized选项。我的工作代码如下:
var url = 'someurl';
var options = {
url: url,
port: 443,
// proxy: process.env.HTTPS_PROXY, -- no need to do this as request honors env vars
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
'Accept-Language': 'en-us',
'Content-Language': 'en-us'
},
timeout: 0,
encoding: null,
rejectUnauthorized: false // added this to prevent the UNABLE_TO_GET_ISSUER_CERT_LOCALLY error
};
request(options, function (err, resp, body) {
if (err) reject(err);
else resolve(body.toString());
});
我想尝试使用async/await切换到fetch api,现在正在尝试使用node-fetch执行相同的操作。然而,当我做同样的事情时,我又遇到了“UNABLE_TO_GET_ISSUER_CERT_LOCALLY”错误。我读到需要使用代理代理器(proxy agent),并尝试使用proxy-agent模块,但仍然没有成功。
根据https://github.com/TooTallNate/node-https-proxy-agent/issues/11的帖子,我认为以下内容应该有效:
var options = {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko',
'Accept-Language': 'en-us',
'Content-Language': 'en-us'
},
timeout: 0,
encoding: null
};
var proxyOptions = nodeurl.parse(process.env.HTTPS_PROXY);
proxyOptions.rejectUnauthorized = false;
options.agent = new ProxyAgent(proxyOptions);
const resp = await fetch('someurl', options);
return await resp.text();
但我仍然遇到相同的错误。到目前为止,我唯一能够使用node-fetch解决这个问题的方式是在我的环境中设置NODE_TLS_REJECT_UNAUTHORIZED=0,但我确实不想这样做。有人可以帮助我展示如何使用node-fetch让rejectUnauthorized工作(可能使用代理,但我只要求它作为请求的一部分被指定)。
fetch
选项中:agent: httpsAgent,
- chovyfetch
选项中:agent: httpsAgent,
- undefined