使用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) })