213 votes

Comment faire un appel REST à distance dans Node.js ? avec CURL ?

Sur Node.js autre que l'utilisation d'un processus enfant pour faire CURL existe-t-il un moyen de faire un appel CURL au serveur distant ? REST API et obtenir les données de retour ?

J'ai également besoin de configurer l'en-tête de la requête à l'adresse distante. REST et également la chaîne de requête en GET (ou POST).

Je trouve celui-là : http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

mais il ne montre aucun moyen de POST query string.

0 votes

235voto

Raynos Points 82706

Regardez http.request

var options = {
  host: url,
  port: 80,
  path: '/resource?id=foo&bar=baz',
  method: 'POST'
};

http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
}).end();

3 votes

Donc, même s'il s'agit d'un POST, j'ajoute également des données dans la chaîne de requête ?

3 votes

@murvinlai pas sûr. Allez lire la documentation, les sources, les spécifications HTTP. Je ne suis pas un expert de cette région.

0 votes

Version 6.18 docs : nodejs.org/docs/v0.6.18/api/

95voto

Matt Frear Points 6287

Que diriez-vous d'utiliser Request - Client HTTP simplifié .

Édition février 2020 : La requête a été dépréciée donc vous ne devriez probablement plus l'utiliser.

Voici un GET :

var request = require('request');
request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode === 200) {
        console.log(body) // Print the google web page.
     }
})

L'OP voulait aussi un POST :

request.post('http://service.com/upload', {form:{key:'value'}})

1 votes

Fonctionne bien avec google.com mais renvoie "RequestError : Error : socket hang up" lorsqu'on demande l'api graphique de Facebook. Veuillez nous guider, merci !

0 votes

Ce module contient beaucoup de problèmes !

0 votes

Comment puis-je passer un paramètre de requête tout en consommant une API REST de cette manière ?

40voto

Giulio Roggero Points 646

Regardez http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/

var https = require('https');

/**
 * HOW TO Make an HTTP Call - GET
 */
// options for GET
var optionsget = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsget, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
    // console.log("headers: ", res.headers);

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

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

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

/**
 * Get Message - GET
 */
// options for GET
var optionsgetmsg = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsgetmsg);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsgetmsg, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);

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

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

1 votes

Comment puis-je accéder aux valeurs de d ?? d = {"data" :[{"id":1111, "name" : "peter"}]} . comment obtenir la valeur du nom ?

2 votes

J'ai réussi à obtenir des valeurs en utilisant var thed = JSON.parse(d) ; console.log("l'id est : "+thed.data[0].id) ; Mais parfois, j'obtiens "Unexpected end of input".

11voto

swapnil_mishra Points 61

J'ai utilisé restler pour appeler les webservices, cela fonctionne comme un charme et c'est plutôt chouette.

1voto

user3730160 Points 1

Vous pouvez utiliser curlrequest pour définir facilement l'heure de la demande que vous voulez faire... vous pouvez même définir des en-têtes dans les options pour " faux " un appel au navigateur.

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