NodeJS调用login.microsoftonline.com出现getaddrinfo ENOTFOUND错误求助
问题
使用Node.js向微软密钥接口发起GET请求时返回错误 getaddrinfo ENOTFOUND login.microsoftonline.com,但相同请求在Postman中可正常运行。相关代码如下:
const http = require('https'); var options = { host: 'login.microsoftonline.com', path: '/common/discovery/keys' }; callback = function(response) { var str = ''; //another chunk of data has been received, so append it to `str` response.on('data', function (chunk) { str += chunk; }); //the whole response has been received, so we just print it out here response.on('end', function () { console.log(str); }); } http.request(options, callback).end();
原因及解决方法
- DNS解析差异:Postman和Node.js可能使用不同的DNS服务器。可以手动指定公共DNS(如8.8.8.8)测试系统解析,或直接用
login.microsoftonline.com的IP地址替换代码中的host字段临时验证。 - 代理配置不一致:Postman可能自动读取了系统代理或配置了专属代理,而Node.js默认不会继承。若系统存在代理,可在代码中添加代理配置:
var options = { host: 'login.microsoftonline.com', path: '/common/discovery/keys', agent: new https.Agent({ proxy: 'http://你的代理地址:端口' }) }; - Node.js环境网络限制:容器、虚拟机等运行环境可能限制了Node.js的网络访问权限,导致域名解析失败。检查环境的防火墙规则、网络策略,确认允许Node.js访问外部域名。
- hosts文件异常:本地hosts文件可能错误映射了
login.microsoftonline.com,导致解析失效。检查系统hosts文件(Windows路径:C:\Windows\System32\drivers\etc\hosts;Linux/macOS路径:/etc/hosts),删除该域名的错误条目。 - Node.js版本bug:老旧版本的Node.js可能存在HTTPS请求或DNS解析的问题,尝试升级到稳定版后重新测试。
内容的提问来源于stack exchange,提问作者user68288
相关产品推荐
相关产品推荐

