使用node.js获取HTTP头

有没有一个内置的方式来获取通过node.js的特定地址的标题?

就像是,

var headers = getUrlHeaders("http://stackoverflow.com"); 

会返回

 HTTP/1.1 200 OK. Cache-Control: public, max-age=60. Content-Type: text/html; charset=utf-8. Content-Encoding: gzip. Expires: Sat, 07 May 2011 17:32:38 GMT. Last-Modified: Sat, 07 May 2011 17:31:38 GMT. Vary: *. Date: Sat, 07 May 2011 17:31:37 GMT. Content-Length: 32516. 

这个示例代码应该工作:

 var http = require('http'); var options = {method: 'HEAD', host: 'stackoverflow.com', port: 80, path: '/'}; var req = http.request(options, function(res) { console.log(JSON.stringify(res.headers)); } ); req.end(); 

尝试查看http.get和响应头 。

 var http = require("http"); var options = { host: 'stackoverflow.com', port: 80, path: '/' }; http.get(options, function(res) { console.log("Got response: " + res.statusCode); for(var item in res.headers) { console.log(item + ": " + res.headers[item]); } }).on('error', function(e) { console.log("Got error: " + e.message); }); 

使用优秀的request模块:

 var request = require('request'); request("http://stackoverflow.com", {method: 'HEAD'}, function (err, res, body){ console.log(res.headers); }); 

如果你愿意的话,你可以改变方法到GET ,但是如果你只想查看头文件,那么使用HEAD可以节省你的整个响应体。

我有一些http.get问题; 所以我切换到lib request

 var request = require('request'); var url = 'http://blog.mynotiz.de/'; var options = { url: url, method: 'HEAD' }; request(options, function (error, response, body) { if (error) { return console.error('upload failed:', error); } if (response.headers['content-length']) { var file_size = response.headers['content-length']; console.log(file_size); } } ); 

我不知道你怎么可以做这个与Node,但总的想法是发送一个HTTP HEAD请求到你感兴趣的URL。

要求响应与对应于GET请求的响应相同,但没有响应主体。 这对于检索写在响应标题中的元信息是有用的,而不必传输整个内容。


像这样的东西,基于这个问题 :

 var cli = require('cli'); var http = require('http'); var url = require('url'); cli.parse(); cli.main(function(args, opts) { this.debug(args[0]); var siteUrl = url.parse(args[0]); var site = http.createClient(80, siteUrl.host); console.log(siteUrl); var request = site.request('HEAD', siteUrl.pathname, {'host' : siteUrl.host}) request.end(); request.on('response', function(response) { response.setEncoding('utf8'); console.log('STATUS: ' + response.statusCode); response.on('data', function(chunk) { console.log("DATA: " + chunk); }); }); }); 

这是我的贡献,它使用http或https处理任何URL,并使用Promise。

 const http = require('http') const https = require('https') const url = require('url') function getHeaders(myURL) { const parsedURL = url.parse(myURL) const options = { protocol: parsedURL.protocol, hostname: parsedURL.hostname, method: 'HEAD', path: parsedURL.path } let protocolHandler = (parsedURL.protocol === 'https:' ? https : http) return new Promise((resolve, reject) => { let req = protocolHandler.request(options, (res) => { resolve(res.headers) }) req.on('error', (e) => { reject(e) }) req.end() }) } getHeaders(myURL).then((headers) => { console.log(headers) })