我正在尝试从节点服务器端执行https request
,但它会出现以下错误: -
Caught exception: Error: CERT_UNTRUSTED
如果我执行http request
,那么它的工作正常,但https
链接 无法正常工作。
这是我的代码: -
var request = require('request');
request('https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
任何想法?
答案 0 :(得分:3)
这可以归结为很多事情,我运行你的代码,对我来说很好
node --version
v0.12.5
所以我会看看
定期更新根证书,我建议更新,因为它可能使用的证书比您的发行版中的根证书更新,因此显示为不受信任
网络 - 您可能会在代理服务器后面执行您的请求意外事件
目标服务器,它可能会返回意外的东西。
最有可能的是1,您使用的是一个不识别网站证书提供者的nodejs版本,因此说它不受信任。
我将2和3放在同一水平的可能性上。如果您正在抄袭维基百科,那么它们可能会阻止您/将您推送到证书可能无效的错误页面。
虽然你可以像其他海报所建议的那样,关闭验证,但我会建议不要这样做。永远不要在生产环境中这样做。
我违反此规则的唯一一次是本地计算机上的自签名证书。
答案 1 :(得分:0)
它看起来像是SSL问题,是修复网络环境SSL的最佳方法。
现在,您可以将rejectUnauthorized设为false
const request = require("request");
const https = require('https');
const agentOptions = {
host: 'en.m.wikipedia.org',
port: '443',
path: '/wiki/Astrid_Olofsdotter_of_Sweden',
rejectUnauthorized: false
};
const agent = new https.Agent(agentOptions);
const postOption = {
method: 'GET',
agent: agent,
uri: 'https://en.m.wikipedia.org/wiki/Astrid_Olofsdotter_of_Sweden'
};
request(postOption, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
答案 2 :(得分:0)
非常接近的答案位于here。
一个非常详细的&这个问题的具体答案是here。
我会推荐以下内容:
在致电https.request()
之前设置:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
在座席选项中,设置:
const agentOptions = {
...
rejectUnauthorized: false
};
答案 3 :(得分:-1)
您可以使用以下命令绕过https:
npm config set strict-ssl false
设置strict-ssl false允许所有节点服务器访问任何URL。
或从https或http设置注册表URL,如下所示:
npm config set registry="http://registry.npmjs.org/"
注意:但是,我个人认为绕过https不是真正的解决方案,但我们可以将其用作解决方法。
希望这有帮助。