在 nodejs (express/http) 中获取 url 的响应
Get response of url in nodejs (express/http)
我试图在 nodejs 中获取两个 URL 的响应,但是 http.request 有问题。这是我目前所拥有的:
var url = "https://www.google.com/pretend/this/exists.xml";
var opt = {
host: url.split(".com/")[0] + ".com",
path: "/" + url.split(".com/")[1]
};
callback = function(response){
var str = "";
response.on('data', function(chunk){
str += chunk;
});
response.on('end', function(){
console.log(str);
});
}
http.request(opt, callback).end();
我遇到了这个错误
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)
所以我用谷歌搜索并得到了这个 Whosebug 问题
其中接受的答案说您需要省略协议..但这是问题所在,我需要检查是否
https://www.google.com/pretend/this/exists.xml
给出 200,如果不是 (404),那么我需要检查是否
http://www.google.com/pretend/this/exists.xml
给出有效回复
这就是问题所在,我需要检查特定协议的响应。
有什么想法吗?
编辑:
刚刚查看 http 文档(我知道我很懒),我看到了 http.get 示例。我现在就试试
编辑 2:
所以我尝试了这个
http.get(url, function(res){
console.log("response: " + res.statusCode);
}).on('error', function(e){
console.log("error: " + e.message);
});
显然不支持 https。
Error: Protocol:https: not supported.
首先,您应该需要 http 或 https 模块,具体取决于您要使用的内容:
var https = require('https');
var http = require('http');
http/https模块是Node.js的核心之一,所以你不需要用npm install安装。
缺少的是监听错误:
var url = 'https://www.google.com/pretend/this/exists.xml';
var options = {
host: url.split('.com/')[0] + '.com',
path: '/' + url.split('.com/')[1]
};
var req = https.request(options, function (res) {
var str = "";
res.on('data', function (chunk) {
str += chunk;
});
res.on('end', function () {
console.log(str);
});
});
req.on('error', function (err) {
console.log('Error message: ' + err);
});
req.end();
我也将你的代码更新到更好的版本并澄清版本。
您需要监听请求中的 error
事件。如果没有附加处理程序,它将抛出错误,但如果有附加处理程序,它将把错误作为异步回调中的参数传递。此外,如果您打算发出安全请求,则应为节点使用 https
模块,而不是 http
。所以试试这个:
var https = require("https");
var url = "https://www.google.com/pretend/this/exists.xml";
var opt = {
host: url.split(".com/")[0] + ".com",
path: "/" + url.split(".com/")[1]
};
function callback(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
});
response.on("end", function () {
console.log(str);
});
}
var request = https.request(opt, callback);
request.on("error", function (error) {
console.error(error);
});
request.end();
我更喜欢将请求 npm 模块用于 http 请求。您会收到一个标准回调。
var request = require('request');
opts = {
url : 'https://www.google.com/pretend/this/exists.xml'
};
request.get(opts, function (error, response, body) {
//Handle error, and body
});
request.post, request.put, request.head etc.
这允许对错误进行相当标准的处理。
我试图在 nodejs 中获取两个 URL 的响应,但是 http.request 有问题。这是我目前所拥有的:
var url = "https://www.google.com/pretend/this/exists.xml";
var opt = {
host: url.split(".com/")[0] + ".com",
path: "/" + url.split(".com/")[1]
};
callback = function(response){
var str = "";
response.on('data', function(chunk){
str += chunk;
});
response.on('end', function(){
console.log(str);
});
}
http.request(opt, callback).end();
我遇到了这个错误
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)
所以我用谷歌搜索并得到了这个 Whosebug 问题 其中接受的答案说您需要省略协议..但这是问题所在,我需要检查是否
https://www.google.com/pretend/this/exists.xml
给出 200,如果不是 (404),那么我需要检查是否
http://www.google.com/pretend/this/exists.xml
给出有效回复
这就是问题所在,我需要检查特定协议的响应。
有什么想法吗?
编辑: 刚刚查看 http 文档(我知道我很懒),我看到了 http.get 示例。我现在就试试
编辑 2:
所以我尝试了这个
http.get(url, function(res){
console.log("response: " + res.statusCode);
}).on('error', function(e){
console.log("error: " + e.message);
});
显然不支持 https。
Error: Protocol:https: not supported.
首先,您应该需要 http 或 https 模块,具体取决于您要使用的内容:
var https = require('https');
var http = require('http');
http/https模块是Node.js的核心之一,所以你不需要用npm install安装。
缺少的是监听错误:
var url = 'https://www.google.com/pretend/this/exists.xml';
var options = {
host: url.split('.com/')[0] + '.com',
path: '/' + url.split('.com/')[1]
};
var req = https.request(options, function (res) {
var str = "";
res.on('data', function (chunk) {
str += chunk;
});
res.on('end', function () {
console.log(str);
});
});
req.on('error', function (err) {
console.log('Error message: ' + err);
});
req.end();
我也将你的代码更新到更好的版本并澄清版本。
您需要监听请求中的 error
事件。如果没有附加处理程序,它将抛出错误,但如果有附加处理程序,它将把错误作为异步回调中的参数传递。此外,如果您打算发出安全请求,则应为节点使用 https
模块,而不是 http
。所以试试这个:
var https = require("https");
var url = "https://www.google.com/pretend/this/exists.xml";
var opt = {
host: url.split(".com/")[0] + ".com",
path: "/" + url.split(".com/")[1]
};
function callback(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
});
response.on("end", function () {
console.log(str);
});
}
var request = https.request(opt, callback);
request.on("error", function (error) {
console.error(error);
});
request.end();
我更喜欢将请求 npm 模块用于 http 请求。您会收到一个标准回调。
var request = require('request');
opts = {
url : 'https://www.google.com/pretend/this/exists.xml'
};
request.get(opts, function (error, response, body) {
//Handle error, and body
});
request.post, request.put, request.head etc.
这允许对错误进行相当标准的处理。