我正在尝试从我的 node服务器 side执行https request
,但它给了我以下错误: -
Caught exception: Error: CERT_UNTRUSTED
如果我执行http request
,则可以正常工作,但是对于https
links 它不起作用。
这是我的代码: -
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.
}
})
有什么想法?
这可能取决于许多事情,IVE运行您的代码,对我来说很好
node --version
v0.12.5
所以我会看
- 您正在使用的nodejs版本
定期更新了根证书,我建议您进行更新
网络 - 您有可能在代理人后面对您的请求做出意外的事情
目标服务器,它可能会返回一些意外的东西。
最有可能的是1,您使用的是nodejs的版本,该版本无法识别网站的证书提供商,因此说其不受信任。
我将2和3放在相同水平的可能性上。如果您是在蜘蛛网上,他们可能会阻止您/将您推到错误页面,该页面可能无效。
虽然您可以正如其他海报所建议的那样,请关闭验证,但我建议不要将其视为一种习惯。而且永远不要在生产环境中这样做。
我唯一打破此规则的时间是在本地计算机上进行自签名证书。
它看起来像是一个SSL问题,是修复网络环境的SSL的最佳方法。
现在,您可以通过将拒绝为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);
}
});
您可以使用以下命令绕过https:
npm config set strict-ssl false
设置strict-ssl false允许所有节点服务器访问任何URL。
或从HTTPS或HTTP设置注册表URL如下:
npm config set registry="http://registry.npmjs.org/"
注意:但是,我个人认为绕过https并不是真正的解决方案,但是我们可以将其用作解决方法。
希望这会有所帮助。
这里的一个非常紧密的答案。
非常详细的&此处给出了此问题的具体答案。
我会推荐以下内容:
在致电https.request()
设置之前:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
在代理选项中,设置:
const agentOptions = {
...
rejectUnauthorized: false
};
另外,请参阅请求库的TLS/SSL的文档。