Node.js के अंदर दूरस्थ REST कॉल कैसे करें? कोई CURL?


189

में Node.js , बच्चे प्रक्रिया का उपयोग कर बनाने के लिए की तुलना में अन्य कर्ल कॉल, वहाँ दूरस्थ सर्वर से कर्ल कॉल करने के लिए एक रास्ता है बाकी एपीआई और वापसी डेटा प्राप्त?

मुझे दूरस्थ आरईएसटी कॉल के लिए अनुरोध हेडर सेट करने की आवश्यकता है , और जीईटी (या पीओटी) में भी स्ट्रिंग स्ट्रिंग।

मुझे यह एक लगता है: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-ododes

लेकिन यह POST क्वेरी स्ट्रिंग का कोई रास्ता नहीं दिखाता है।


जवाबों:


212

की ओर देखें 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
तो, यहां तक ​​कि यह POST है, मैं क्वेरी स्ट्रिंग में डेटा भी जोड़ता हूं?
मुर्विनलाई

3
@murvinlai निश्चित नहीं। डॉक्स, स्रोत, HTTP कल्पना पढ़ें। उस क्षेत्र के विशेषज्ञ नहीं।
रेयानोस

15
ध्यान देने वाली बात यह है कि आप अपनी होस्ट प्रविष्टि में http या https नहीं डालते हैं। var विकल्प = {host: graph.facebook.com ....} नहीं {host: http: graph.facebook.com}। इसने मुझे कुछ चक्रों तक उलझा दिया। (निचे देखो)। ये दोनों महान जवाब हैं। आप दोनों को धन्यवाद।
बाइनरीगिएंट

9
क्या मैं केवल यह बता सकता हूं कि यदि उत्तर लंबा है, तो res.on ('data', ..) का उपयोग करना पर्याप्त नहीं है। मेरा मानना ​​है कि सही तरीका यह भी है कि आप सभी डेटा प्राप्त कर चुके हैं, यह जानने के लिए res.on ('अंत') है। तब आप प्रक्रिया कर सकते हैं।
Xerri

4
यह एक बहुत पुराना उत्तर है - आज नोड्स लिखने वालों के लिए आप निश्चित रूप से npmjs.com/package/node-fetch या अन्य भ्रूण एपीआई आधारित पैकेज का उपयोग करेंगे , जो Fetch standard पर आधारित है। नीचे मेरा जवाब देखें।
सेल

95

अनुरोध का उपयोग कैसे करें - सरलीकृत HTTP क्लाइंट

फरवरी 2020 को संपादित करें: अनुरोध को पदावनत कर दिया गया है, इसलिए आपको संभवतः इसका उपयोग नहीं करना चाहिए।

यहाँ एक 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.
     }
})

ओपी को भी POST चाहिए था:

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

1
Google.com के साथ ठीक काम करता है, लेकिन फ़ेसबुक के ग्राफ़ एपी के लिए अनुरोध करने पर "रिक्वेस्ट: एरर: सॉकेट हैंग" होता है। कृपया मार्गदर्शन करें, धन्यवाद!
डायनामिक रेमो

इस मॉड्यूल में बहुत सारे मुद्दे हैं!
प्रतिक सिंघल

इस तरह REST API का उपभोग करते समय मैं एक अनुरोध पैरामीटर कैसे पारित कर सकता हूं?
vdenotaris

2
11 फरवरी 2020 तक, अनुरोध पूरी तरह से समाप्त हो गया है। आप इसे वेबसाइट github.com/request/request#deprecated
Sadiel

क्या newbies उपयोग करना चाहिए पर कोई मार्गदर्शन? मैं बहुत सारे उदाहरणों को फ़िल्टर कर रहा हूं जो इसका उपयोग करते हैं।
स्टीव

36

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
मैं d से मानों का उपयोग कैसे करूँ ??? d = {"data": [{"id": 1111, "name": "peter"}]}। नाम मान कैसे प्राप्त करें?
पीटर

2
var thed = JSON.parse (d) का उपयोग करके मान प्राप्त करने में कामयाब; कंसोल.लॉग ("आईडी है:" + thed.data [0] .id); लेकिन कुछ समय बाद मुझे "इनपुट का अप्रत्याशित अंत" मिलता है
पीटर

33

मैं नोड-भ्रूण का उपयोग करता हूं क्योंकि यह परिचित (यदि आप एक वेब डेवलपर हैं) भ्रूण () एपीआई का उपयोग करते हैं । लाने () ब्राउज़र से HTTP अनुरोधों को मनमाने ढंग से करने का नया तरीका है।

हां मुझे पता है कि यह एक नोड जेएस प्रश्न है, लेकिन क्या हम एपीआई के डेवलपर्स की संख्या को कम नहीं करना चाहते हैं और याद रखना और समझना, और हमारे जावास्क्रिप्ट कोड के पुन: प्रयोज्य में सुधार करना चाहते हैं? एक मानक है इसलिए हम उस पर कैसे एकाग्र होते हैं?

भ्रूण () के बारे में दूसरी अच्छी बात यह है कि यह एक जावास्क्रिप्ट वादा लौटाता है , इसलिए आप इस तरह से async कोड लिख सकते हैं:

let fetch = require('node-fetch');

fetch('http://localhost', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{}'
}).then(response => {
  return response.json();
}).catch(err => {console.log(err);});

XMLHTTPRequest को प्राप्त करें । यहाँ कुछ और जानकारी है


node-fetchएपीआई को लिखने के दौरान समस्या यह है कि केवल कार्य पूर्ण URL होगा और सापेक्ष URL के साथ काम नहीं करेगा।
सेबस्टियन

11

मैं webservices कॉल करने के लिए रेस्लर का उपयोग कर रहा हूं , आकर्षण की तरह काम करता है और बहुत साफ-सुथरा है।


5

Axios

Node.js में Axios का उपयोग कर एक उदाहरण (axios_example.js):

const axios = require('axios');
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;

app.get('/search', function(req, res) {
    let query = req.query.queryStr;
    let url = `https://your.service.org?query=${query}`;

    axios({
        method:'get',
        url,
        auth: {
            username: 'the_username',
            password: 'the_password'
        }
    })
    .then(function (response) {
        res.send(JSON.stringify(response.data));
    })
    .catch(function (error) {
        console.log(error);
    });
});

var server = app.listen(port);

सुनिश्चित करें कि आप अपनी परियोजना निर्देशिका में हैं:

npm init
npm install express
npm install axios
node axios_example.js

तब आप अपने ब्राउज़र का उपयोग करके Node.js REST API का परीक्षण कर सकते हैं: http://localhost:5000/search?queryStr=xxxxxxxxx

इसी तरह आप पोस्ट कर सकते हैं, जैसे:

axios({
  method: 'post',
  url: 'https://your.service.org/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

SuperAgent

इसी तरह आप SuperAgent का उपयोग कर सकते हैं।

superagent.get('https://your.service.org?query=xxxx')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

और यदि आप मूल प्रमाणीकरण करना चाहते हैं:

superagent.get('https://your.service.org?query=xxxx')
.auth('the_username', 'the_password')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

संदर्भ:


5

नवीनतम Async / Await सुविधाओं का उपयोग करने के लिए

https://www.npmjs.com/package/request-promise-native

npm install --save request
npm install --save request-promise-native

// कोड

async function getData (){
    try{
          var rp = require ('request-promise-native');
          var options = {
          uri:'https://reqres.in/api/users/2',
          json:true
        };

        var response = await rp(options);
        return response;
    }catch(error){
        throw error;
    }        
}

try{
    console.log(getData());
}catch(error){
    console.log(error);
}

4

एक और उदाहरण - आपको इसके लिए अनुरोध मॉड्यूल स्थापित करने की आवश्यकता है

var request = require('request');
function get_trustyou(trust_you_id, callback) {
    var options = {
        uri : 'https://api.trustyou.com/hotels/'+trust_you_id+'/seal.json',
        method : 'GET'
    }; 
    var res = '';
    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            res = body;
        }
        else {
            res = 'Not Found';
        }
        callback(res);
    });
}

get_trustyou("674fa44c-1fbd-4275-aa72-a20f262372cd", function(resp){
    console.log(resp);
});

4
var http = require('http');
var url = process.argv[2];

http.get(url, function(response) {
  var finalData = "";

  response.on("data", function (data) {
    finalData += data.toString();
  });

  response.on("end", function() {
    console.log(finalData.length);
    console.log(finalData.toString());
  });

});

3

मुझे CURL के साथ कोई भी नहीं मिला, इसलिए मैंने नोड-लिबासर्ल के चारों ओर एक आवरण लिखा और https://www.npmjs.com/package/vps-rest-client पर पाया जा सकता है

एक POST बनाने के लिए ऐसा है:

var host = 'https://api.budgetvm.com/v2/dns/record';
var key = 'some___key';
var domain_id = 'some___id';

var rest = require('vps-rest-client');
var client = rest.createClient(key, {
  verbose: false
});

var post = {
  domain: domain_id,
  record: 'test.example.net',
  type: 'A',
  content: '111.111.111.111'
};

client.post(host, post).then(function(resp) {
  console.info(resp);

  if (resp.success === true) {
    // some action
  }
  client.close();
}).catch((err) => console.info(err));

2

आप Node.js है, तो 4.4+, पर एक नज़र डालें reqclient , यह आप कॉल करने और में अनुरोध लॉग इन करने की अनुमति देता है cURL ताकि आप आसानी से जाँच करें और आवेदन के बाहर कॉल पुन: पेश कर सकते हैं, शैली।

रिटर्न सरल कॉलबैक के बजाय वस्तुओं का वादा करता है , इसलिए आप परिणाम को अधिक "फैशन" तरीके से संभाल सकते हैं , श्रृंखला से संभाल सकते हैं, परिणाम को आसानी से कर सकते हैं, और मानक तरीके से त्रुटियों को संभाल सकते हैं। प्रत्येक अनुरोध पर बहुत सारे बॉयलरप्लेट कॉन्फ़िगरेशन हटाता है: बेस URL, टाइम आउट, सामग्री प्रकार प्रारूप, डिफ़ॉल्ट हेडर, पैरामीटर और URL में क्वेरी बाइंडिंग, और मूल कैश सुविधाएँ।

यह एक उदाहरण है कि इसे कैसे शुरू किया जाए, एक कॉल करें और कर्ल स्टाइल के साथ ऑपरेशन लॉग करें :

var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
    baseUrl:"http://baseurl.com/api/", debugRequest:true, debugResponse:true});
client.post("client/orders", {"client": 1234, "ref_id": "A987"},{"x-token": "AFF01XX"});

यह कंसोल में लॉग इन करेगा ...

[Requesting client/orders]-> -X POST http://baseurl.com/api/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json

और जब प्रतिक्रिया वापस हो जाती है ...

[Response   client/orders]<- Status 200 - {"orderId": 1320934}

यह वादा वस्तु के साथ प्रतिक्रिया को संभालने का एक उदाहरण है:

client.get("reports/clients")
  .then(function(response) {
    // Do something with the result
  }).catch(console.error);  // In case of error ...

बेशक, इसे इसके साथ स्थापित किया जा सकता है npm install reqclient:।


1

आप कर्लरेक्स्ट का उपयोग आसानी से कर सकते हैं कि आप किस समय अनुरोध करना चाहते हैं ... आप ब्राउज़र कॉल को " नकली " करने के विकल्पों में हेडर भी सेट कर सकते हैं।


0

मैंने पाया कि यह वास्तव में उपयोगी है, यह उदाहरण के लिए बहुत सरल है

const superagent=require('superagent')
superagent
.get('google.com')
.set('Authorization','Authorization object')
.set('Accept','application/json')

0

चेतावनी: 11 फरवरी 2020 तक, अनुरोध पूरी तरह से समाप्त हो गया है।

यदि आप फॉर्म-डेटा के साथ, अधिक जानकारी के लिए ( https://tanaikech.github.io/2017/07/27/multipart-post-request-use-node.js ) लागू करते हैं:

var fs = require('fs');
var request = require('request');
request.post({
  url: 'https://slack.com/api/files.upload',
  formData: {
    file: fs.createReadStream('sample.zip'),
    token: '### access token ###',
    filetype: 'zip',
    filename: 'samplefilename',
    channels: 'sample',
    title: 'sampletitle',
  },
}, function (error, response, body) {
  console.log(body);
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.