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에서 서버를 찾을 수 없기 때문이라는 것을 깨달았습니다. 그러나 코드가 완벽하게 작동하기 때문에 왜 이것이 될지 잘 모르겠습니다 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에서 웹 서비스 호출을하는가?
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이 다음과 같이 구문 분석됩니다 url.parse()
. 또는 호출 http.get(options, callback)
, 어디는 options
것입니다
{
host: 'eternagame.wikia.com',
port: 8080,
path: '/wiki/EteRNA_Dictionary'
}
최신 정보
@EnchanterIO의 의견에서 언급했듯이이 port
필드는 별도의 옵션이기도합니다. 프로토콜 http://
이 host
필드에 포함되어서는 안됩니다 . 다른 답변은 https
SSL이 필요한 경우 모듈 사용을 권장 합니다.
답변
에 대한 또 다른 일반적인 오류 원인
Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer [as oncomplete] (dns.js:124:16)
속성을 설정할 때 프로토콜 (https, https, …)을 쓰고 host
있습니다.options
// 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) {
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 (Mavericks) DNS 서비스를 재부팅 해야한다는 것 입니다.
답변
옵션 객체에서 완전한 호스트 URL을 언급했지만 http가 포트 80에서 요청한다고 생각합니다. 이전에 포트 3000에서 실행했던 포트 80에서 API가있는 서버 응용 프로그램을 실행할 때 작동했습니다. 포트 80에서 응용 프로그램을 실행하려면 루트 권한이 필요합니다.
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();