Получение заголовков HTTP с узлом.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.
6 ответов:
этот код должен работать:
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.получить и заголовки ответа.
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
; поэтому я переключился на librequest
: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); } } );
Я не уверен, как вы могли бы сделать это с узлом, но общая идея заключалась бы в том, чтобы отправить 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); }); }); });
вот мой вклад, который касается любого URL-адреса с использованием http или https и использует обещания.
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) })