1100 votes

Comment faire une requête HTTP POST dans node.js?

Comment puis-je faire un aller requête HTTP POST, avec des données, en node.js?

1213voto

Jed Watson Points 4462

Cela devient beaucoup plus facile si vous utilisez la demande de la bibliothèque.

var request = require('request');

request.post(
    'http://www.yoursite.com/formpage',
    { form: { key: 'value' } },
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body)
        }
    }
);

En plus d'offrir une belle syntaxe qu'il fait json demandes facile, poignées oauth signature (pour twitter, etc.), peut faire des formulaires en plusieurs parties (par exemple, pour le téléchargement de fichiers) et le streaming.

936voto

onteria_ Points 18947

Voici un exemple d'utilisation de node.js pour faire une requête POST vers le Google Compilateur API:

// We need this to build our post string
var querystring = require('querystring');
var http = require('http');
var fs = require('fs');

function PostCode(codestring) {
  // Build the post string from an object
  var post_data = querystring.stringify({
      'compilation_level' : 'ADVANCED_OPTIMIZATIONS',
      'output_format': 'json',
      'output_info': 'compiled_code',
        'warning_level' : 'QUIET',
        'js_code' : codestring
  });

  // An object of options to indicate where to post to
  var post_options = {
      host: 'closure-compiler.appspot.com',
      port: '80',
      path: '/compile',
      method: 'POST',
      headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': post_data.length
      }
  };

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

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

}

// This is an async file read
fs.readFile('LinkedList.js', 'utf-8', function (err, data) {
  if (err) {
    // If this were just a small part of the application, you would
    // want to handle this differently, maybe throwing an exception
    // for the caller to handle. Since the file is absolutely essential
    // to the program's functionality, we're going to exit with a fatal
    // error instead.
    console.log("FATAL An error occurred trying to read in the file: " + err);
    process.exit(-2);
  }
  // Make sure there's data before we post it
  if(data) {
    PostCode(data);
  }
  else {
    console.log("No data to post");
    process.exit(-1);
  }
});

J'ai mis à jour le code pour montrer comment publier des données à partir d'un fichier, au lieu de la chaîne codée en dur. Il utilise la async fs.readFile de commande pour atteindre cet objectif, affichant le code après avoir réussi à lire. Si il y a une erreur, il est jeté, et si il n'y a pas de données, le processus s'arrête avec une valeur négative pour indiquer l'échec.

48voto

Grant Li Points 381

J'utilise Restler et l'Aiguille des fins de production. Ils sont à la fois beaucoup plus puissant que les httprequest. Il est possible de demander avec l'authentification de base, spéciales d'entrée d'en-tête ou même télécharger/télécharger des fichiers.

Comme pour le post/get opération, ils sont aussi beaucoup plus simple à utiliser que les premières appels ajax à l'aide de httprequest.

needle.post('https://my.app.com/endpoint', {foo:'bar'}, 
    function(err, resp, body){
        console.log(body);
});

22voto

ranm8 Points 226

Vous pouvez également utiliser Requestify, un vraiment cool et simple client HTTP, j'ai écrit pour nodeJS + il prend en charge la mise en cache.

Il suffit de faire la suivante:

    var requestify = require('requestify');

    requestify.post('http://example.com', {
        hello: 'world'
    })
    .then(function(response) {
        // Get the response body (JSON parsed or jQuery object for XMLs)
        response.getBody();
    });

9voto

wilsonpage Points 5495

J'ai fait un amical wrapper pour ce complexe de l'API: https://gist.github.com/1393666

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