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)
在设置options
的host
属性时正在编写协议 (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