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


Comment puis-je effectuer une requête HTTP POST sortante, avec des données, dans node.js?


730
2018-05-28 00:44


origine


Réponses:


Voici un exemple d'utilisation de node.js pour envoyer une requête POST à ​​l'API Google Compiler:

// 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': Buffer.byteLength(post_data)
      }
  };

  // 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 l'async fs.readFile commande pour y parvenir, l'affichage du code réel après une lecture réussie. S'il y a une erreur, elle est lancée, et s'il n'y a pas de données, le processus se termine avec une valeur négative pour indiquer l'échec.


705
2018-05-28 00:50



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

var request = require('request');

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

En plus de fournir une bonne syntaxe, il rend les requêtes json faciles, gère la signature oauth (pour twitter, etc.), peut faire des formulaires en plusieurs parties (par exemple pour le téléchargement de fichiers) et le streaming.

Pour installer la commande request use npm install request


927
2017-10-21 15:57



Vous pouvez utiliser la bibliothèque de requêtes. https://www.npmjs.com/package/request

var request = require('request');

Pour publier des données JSON:

var myJSONObject = { ... };
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    json: true,   // <--Very important!!!
    body: myJSONObject
}, function (error, response, body){
    console.log(response);
});

Pour publier des données XML:

var myXMLText = '<xml>...........</xml>'
request({
    url: "http://josiahchoi.com/myjson",
    method: "POST",
    headers: {
        "content-type": "application/xml",  // <--Very important!!!
    },
    body: myXMLText
}, function (error, response, body){
    console.log(response);
});

107
2018-02-03 10:57



j'utilise Restler et Aiguille à des fins de production. Ils sont tous deux beaucoup plus puissants que les requêtes http natives. Il est possible de demander une authentification de base, une entrée d'en-tête spéciale ou même de télécharger / télécharger des fichiers.

En ce qui concerne l'opération post / get, ils sont également beaucoup plus simples à utiliser que les appels ajax bruts utilisant httprequest.

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

39
2018-03-08 19:07



Vous pouvez aussi utiliser Requestifier, un client HTTP vraiment cool et simple que j'ai écrit pour nodeJS + il supporte la mise en cache.

Fais juste ce qui suit:

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

19
2017-07-18 18:15



Pour ceux qui viennent ici dans les dernières années. Il existe maintenant une grande variété de bibliothèques différentes qui peuvent accomplir ceci avec un codage minimal. Je préfère de loin les bibliothèques élégantes et légères pour les requêtes HTTP, à moins que vous ayez absolument besoin de contrôler le contenu HTTP de bas niveau.

Une telle bibliothèque est Unirest

Pour l'installer, utilisez npm.
$ npm install unirest

Et sur le Hello, World! exemple auquel tout le monde est habitué.

var unirest = require('unirest');

unirest.post('http://example.com/helloworld')
.header('Accept', 'application/json')
.send({ "Hello": "World!" })
.end(function (response) {
  console.log(response.body);
});


Supplémentaire:
Beaucoup de gens suggèrent aussi l'utilisation de demande  [2]

Il devrait être intéressant de noter que dans les coulisses Unirest utilise le request bibliothèque.

Unirest fournit des méthodes pour accéder directement à l'objet de requête.

Exemple:

var Request = unirest.get('http://mockbin.com/request');

15
2018-05-12 20:05



C'est le moyen le plus simple que j'utilise pour faire une demande: en utilisant le module 'request'.

Commande pour installer le module 'request':

$ npm install request

Exemple de code:

var request = require('request')

var options = {
  method: 'post',
  body: postData, // Javascript object
  json: true, // Use,If you are sending JSON data
  url: url,
  headers: {
    // Specify headers, If any
  }
}

request(options, function (err, res, body) {
  if (err) {
    console.log('Error :', err)
    return
  }
  console.log(' Body :', body)

});

Vous pouvez également utiliser le module 'http' intégré de Node.js pour faire une demande.


12
2018-01-11 11:48



J'aime la simplicité du super agent (https://github.com/visionmedia/superagent). Même API sur le noeud et le navigateur.

2018 edit: récemment, cependant, je suis passé à l'aide de node-fetch (https://www.npmjs.com/package/node-fetch), qui a un api qui correspond fetch des navigateurs.


11
2018-01-31 00:44



var https = require('https');


/**
 * HOW TO Make an HTTP Call - POST
 */
// do a POST request
// create the JSON object
jsonObject = JSON.stringify({
    "message" : "The web of things is approaching, let do some tests to be ready!",
    "name" : "Test message posted with node.js",
    "caption" : "Some tests with node.js",
    "link" : "http://www.youscada.com",
    "description" : "this is a description",
    "picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
    "actions" : [ {
        "name" : "youSCADA",
        "link" : "http://www.youscada.com"
    } ]
});

// prepare the header
var postheaders = {
    'Content-Type' : 'application/json',
    'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};

// the post options
var optionspost = {
    host : 'graph.facebook.com',
    port : 443,
    path : '/youscada/feed?access_token=your_api_key',
    method : 'POST',
    headers : postheaders
};

console.info('Options prepared:');
console.info(optionspost);
console.info('Do the POST call');

// do the POST call
var reqPost = https.request(optionspost, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);

    res.on('data', function(d) {
        console.info('POST result:\n');
        process.stdout.write(d);
        console.info('\n\nPOST completed');
    });
});

// write the json data
reqPost.write(jsonObject);
reqPost.end();
reqPost.on('error', function(e) {
    console.error(e);
});

10
2018-03-11 17:35