6
votes

Lire le message HTTP RAW dans NODEJS

J'envoie une demande HTTP à l'aide de la fonction http.Request, et j'aimerais lire l'ensemble de la réponse HTTP comme texte; c'est-à-dire le texte du protocole HTTP brut. C'est possible? J'ai écrit le code ci-dessous mais cela ne fonctionne pas.

// Set up the request
console.log('Sending request');
var post_req = http.request(post_options, function(res) {
    res.setEncoding('utf8');
    console.log('Response statusCode: ' + res.statusCode);
//    res.on('data', function (chunk) {
//        console.log('Response: ' + chunk);
//    });
//    res.on('end', function() {});
});

post_req.on('socket', function (socket) {
    var response = "";
    socket.on('data', function(chunk){
    console.log(chunk);
    });
});

// post the data
post_req.write(post_data);
post_req.end();


2 commentaires

Peut-être utiliser un autre module de noeud pourrait vous aider, je ne suis pas sûr. Par exemple, le module est bien meilleur que le http . Github.com/mikeal/request


de quoi avez-vous besoin du texte brut?


3 Réponses :


0
votes

Assumer que ces types d'outils sont autorisés dans votre environnement, vous pouvez organiser un proxy de débogage HTTP tel que Fiddler http: / /www.fiddler2.com/ , qui vous permet d'inspecter les appels et les réponses HTTP.


0 commentaires

1
votes

Streams2 et Streams1 ne sont pas toujours capables de bien fonctionner, voir "Problème: Streams1 et Streams2 Duality" dans cette vidéo .

J'ai essayé d'écouter des données à un niveau un peu plus bas que les flux et que ce code imprime la réponse HTTP brute avec des en-têtes pour moi: P>

var http = require('http');
var raw = '';

console.log('Sending request');
var req = http.request({host: 'stackoverflow.com'}, function(res) {
  watch(res, 'res');
  res.on('end', function() {
    console.log(raw);
  });
  res.on('data', function(data) {
    // if we don't attach 'data' handler here 'end' is not called
  });
});


req.on('socket', function (socket) {
  socket.resume();
  var oldOndata = socket.ondata;
  socket.ondata = function(buf, start, end) {
    raw += buf.slice(start, end).toString();
    oldOndata.call(socket, buf, start, end);
  };
});

req.end();


0 commentaires

3
votes

Si vous souhaitez accéder au message HTTP RAW, je vous suggère d'utiliser le module net Au lieu de cela, et écrivez vous-même la demande. Quelque chose comme ça pour une simple demande d'obtention: xxx

pour une requête postale Envoi Application / X-www-Form-Urlencoded Les données, vous pouvez écrire la demande en utilisant quelque chose comme: xxx

où j'utilise tampon .bytelength parce que longueur de contenu nécessite la longueur en octets, pas dans les caractères. Aussi, rappelez-vous que data doit être codé URL codé.

Si vous ne connaissez pas grand chose du format des messages HTTP, c'est un endroit décent pour démarrer:

http://jmarshall.com/easy/http/

En outre, si vous ne savez pas ce que le codage de la réponse sera alors vous devrez d'abord analyser les en-têtes à découvrir, mais utf-8 est de loin le plus commun donc c'est un pari plutôt sûr.


0 commentaires