javascript “错误:getaddrinfo ENOTFOUND”错误时,使一个HTTP请求

jv4diomz  于 2023-04-19  发布在  Java
关注(0)|答案(5)|浏览(275)

以下是AWS Lambda函数中的代码:

var https = require('https');
exports.handler = (event, context, callback) => {
    var params = {
        host: "bittrex.com",
        path: "/api/v1.1/public/getmarketsummaries"
    };
    var req = https.request(params, function(res) {
        var test = res.toString();
        console.log(JSON.parse(test));
        //console.log(JSON.parse(res.toString()));
    });
    req.end();
};

错误:getaddrinfo ENOTFOUND https://bittrex.comhttps://bittrex.com:443 at errnoException(dns.js:28:10)at GetAddrInfoReqWrap.onlookup [as oncomplete](dns.js:76:26)
其他解决方案不起作用。

8i9zcol2

8i9zcol21#

从主机中删除https://。require已经表明您正在使用https/SSL。

jljoyd4f

jljoyd4f2#

我修改了您的代码,以便在AWS Lambda Node.js 6.10中正常工作。我将Lambda超时设置为60秒以进行测试。
最大的变化是添加了“res.on('data',function(chunk){}:“和“res.on('end',function(){}"。

var https = require('https');
exports.handler = (event, context, callback) => {
    var params = {
        host: "bittrex.com",
        path: "/api/v1.1/public/getmarketsummaries"
    };
    var req = https.request(params, function(res) {
        let data = '';
        console.log('STATUS: ' + res.statusCode);
        res.setEncoding('utf8');
        res.on('data', function(chunk) {
            data += chunk;
        });
        res.on('end', function() {
            console.log("DONE");
            console.log(JSON.parse(data));
        });
    });
    req.end();
};
avkwfej4

avkwfej43#

问题出在你的安全组。看起来你的lambda没有解析DNS的权限。检查你的lambda sec组是否启用了端口53 UDP和TCP。

gblwokeq

gblwokeq4#

还要确保lambda尝试到达可到达的主机。换句话说,确保主机驻留在专用网络,VPN或不可到达的网络(无法从外部到达)

(简单但值得一提)

fhg3lkii

fhg3lkii5#

您的lambda和主机必须位于同一个VPC上,还可以尝试为lambda添加与主机相同的安全组

相关问题