74 votes

Obtenir des en-têtes HTTP avec Node.js

Existe-t-il un moyen intégré d'obtenir les en-têtes d'une adresse spécifique via node.js ?

quelque chose comme,

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

retournerais

 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.

144voto

clee Points 5565

Cet exemple de code devrait fonctionner :

 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();

23voto

yojimbo87 Points 27744

Essayez de regarder http.get et les en-têtes de réponse .

 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);
});

21voto

Capt.Nemo Points 553

Utilisation de l'excellent module request

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

Vous pouvez modifier la méthode en GET si vous le souhaitez, mais l'utilisation de HEAD vous évitera d'obtenir le corps de la réponse dans son intégralité si vous souhaitez uniquement consulter les en-têtes.

11voto

Dirty Henry Points 2382

Voici ma contribution, qui traite de n'importe quelle URL utilisant http ou https, et utilise Promises.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X