Node.js getaddrinfo ENOTFOUND

当使用Node.js尝试获取以下网页的html内容时:

eternagame.wikia.com/wiki/EteRNA_Dictionary

我得到以下错误:

 events.js:72 throw er; // Unhandled 'error' event ^ Error: getaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer [as oncomplete] (dns.js:124:16) 

我已经在stackoverflow上查找这个错误,并意识到这是因为node.js无法从DNS(我认为)find服务器。 但是,我不确定为什么会这样,因为我的代码在www.google.com完美运行。

这里是我的代码(实际上从一个非常类似的问题复制和粘贴,除了主机已更改):

 var http = require("http"); var options = { host: 'eternagame.wikia.com/wiki/EteRNA_Dictionary' }; http.get(options, function (http_res) { // initialize the container for our data var data = ""; // this event fires many times, each time collecting another piece of the response http_res.on("data", function (chunk) { // append this chunk to our growing `data` var data += chunk; }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { // you can use res.send instead of console.log to output via express console.log(data); }); }); 

这里是我复制和粘贴的来源: 如何在Expressjs中进行Web服务调用?

我没有使用任何模块node.js.

谢谢阅读,

维尼特

Node.js HTTP模块的文档中: http : //nodejs.org/api/http.html#http_http_request_options_callback

你可以调用http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', callback) ,然后使用url.parse()parsingURL。 或者调用http.get(options, callback) ,其中的options

 { host: 'eternagame.wikia.com', path: '/wiki/EteRNA_Dictionary' } 

另一个常见的错误来源

 Error: getaddrinfo ENOTFOUND at errnoException (dns.js:37:11) at Object.onanswer [as oncomplete] (dns.js:124:16) 

在设置optionshost属性时正在编写协议 (https,https,…)

  // DON'T WRITE THE `http://` var options = { host: 'http://yoururl.com', path: '/path/to/resource' }; 

在HTTP请求的选项中,将其切换到

 var options = { host: 'eternagame.wikia.com', path: '/wiki/EteRNA_Dictionary' }; 

我认为这会解决你的问题。

  var http=require('http'); http.get('http://eternagame.wikia.com/wiki/EteRNA_Dictionary', function(res){ var str = ''; console.log('Response is '+res.statusCode); res.on('data', function (chunk) { //console.log('BODY: ' + chunk); str += chunk; }); res.on('end', function () { console.log(str); }); }); 

如果您需要使用https,请使用https库

 https = require('https'); // options var options = { host: 'eternagame.wikia.com', path: '/wiki/EteRNA_Dictionary' } // get https.get(options, callback); 

我的问题是,我的OS X(小牛)DNS服务需要重新启动 。

请注意,如果您所引用的域发生故障(EG不再存在),也可能发生此问题。

我得到了相同的错误,并在下面的链接使用获得帮助:

https://nodejs.org/api/http.html#http_http_request_options_callback

我没有在我的代码中:

req.end();

(NodeJs V:5.4.0)一次添加req.end(); 行,我能够摆脱这个错误,并为我工作得很好。

我尝试使用请求模块 ,并能够很容易地打印出该页面的正文。 不幸的是,随着我的技能,我无法帮助其他。

从开发环境到生产环境,我遇到了这个错误。 我痴迷于把https://放在所有的链接上。 这是没有必要的,所以它可能是一些解决scheme。

我摆脱了http和额外的斜线(/)。 我只是使用这个“node-test.herokuapp.com”,它的工作。

我认为HTTP请求端口80,即使我提到了选项对象的完整的主机url。 当我运行具有API的服务器应用程序时,在端口80上,我以前在端口3000上运行,它工作。 请注意,要在端口80上运行应用程序,您将需要root权限。

Error with the request: getaddrinfo EAI_AGAIN localhost:3000:80

这是一个完整的代码片段

 var http=require('http'); var options = { protocol:'http:', host: 'localhost', port:3000, path: '/iso/country/Japan', method:'GET' }; var callback = function(response) { var str = ''; //another chunk of data has been recieved, so append it to `str` response.on('data', function (chunk) { str += chunk; }); //the whole response has been recieved, so we just print it out here response.on('end', function () { console.log(str); }); } var request=http.request(options, callback); request.on('error', function(err) { // handle errors with the request itself console.error('Error with the request:', err.message); }); request.end(); 

如果你仍然面临代理设置结账,对我来说,这是代理设置丢失,无法作出直接http / https被阻止的请求。 所以我在提出请求的同时,从我的组织configuration了代理。

 npm install https-proxy-agent or npm install http-proxy-agent const httpsProxyAgent = require('https-proxy-agent'); const agent = new httpsProxyAgent("http://yourorganzation.proxy.url:8080"); const options = { hostname: 'encrypted.google.com', port: 443, path: '/', method: 'GET', agent: agent }; 

我通过从连接的密码中删除不需要的字符来解决此问题。 例如,我有这些字符:<##%,并导致了问题(最有可能的哈希标签是问题的根源)。

解决这个错误的方法是使用节点包pipe理器安装http

 npm install http-server -g