Node.js में बराबर?


152

मैं Node.js (यानी एक दूरस्थ वेब सेवा को कॉल करता हूं और क्लाइंट की प्रतिक्रिया प्रतिध्वनित करता हूं) का उपयोग करके HTTP अनुरोध की जानकारी का उपयोग करना चाहता हूं।

PHP में मैंने ऐसा करने के लिए cURL का उपयोग किया होगा। नोड में सबसे अच्छा अभ्यास क्या है?


13
http.request...
Raynos

इन सभी समाधानों के साथ समस्या यह है कि उन्हें cors के नियंत्रण की आवश्यकता होती है!
मार्को

जवाबों:


103

पूर्ण उदाहरण के लिए HTTP मॉड्यूल के लिए प्रलेखन देखें:

https://nodejs.org/api/http.html#http_http_request_options_callback


10
यह बताने के लायक है कि बहुत लोकप्रिय रैपर लाइब्रेरी है request.js github.com/mikeal/request
Farzher

2
http अनुरोध y async, कर्ल सिंक है।
ई-इंफो e

2
@WHK ऐसे Node.js का स्वभाव है
slifty

इसके साथ मुझे जो बड़ी समस्या दिख रही है, वह यह है कि आप केवल URL दर्ज कर सकते हैं और प्रतिक्रिया प्राप्त कर सकते हैं। आपको अनुरोध करने के लिए इकाइयों में URL को अलग करना होगा। लेकिन शाप का शायद एक तरीका है, इसके लिए कमांड की तरह एक कर्ल का उपयोग करना अधिक आश्वस्त होगा।
जानिस ग्रूसिस

15
यह साइट आपके cURLआदेश को नोड.जेएस अनुरोध में बदल सकती है : curl.trillworks.com/#node
Maxim Mai

74

httpरिमोट चलाने के लिए आप जिस मॉड्यूल का उपयोग सर्वर चलाते हैं, उसका भी उपयोग किया जाता है।

यहाँ उनके डॉक्स में उदाहरण दिया गया है:

var http = require("http");

var options = {
  host: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST'
};

var req = 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);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

14
ओपी द्वारा पूछे जाने वाले कर्ल-जैसा व्यवहार की तुलना में यह बहुत कम स्तर है।
Dan Dascalescu

1
सभी के लिए: आजकल, उपयोग करें request- npmjs.com/package/request - और नीतीश के उत्तर को नीचे दें, जो कि 2018 में बेहतर उत्तर है।
दान निसेनबूम

वास्तविकता में आपका स्वागत है: अनुरोध को हटा दिया गया है, देखें github.com/request/request/issues/3142 मुझे लगता है कि "निम्न-स्तरीय" ऑपरेशन की तुलना में अधिक क्षमता है, क्योंकि यह बिल्कुल भी कम नहीं है, यह BASIC है
vintproykt

35

आप आसानी से अनुरोध मॉड्यूल का उपयोग कर सकते हैं:

https://www.npmjs.com/package/request

नमूना कोड:

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Show the HTML for the Google homepage. 
  }
  else {
    console.log("Error "+response.statusCode)
  }
})

27

चूंकि ऐसा लगता है node-curlकि मर चुका है, मैंने इसे बदल दिया है, नाम बदल दिया है, और विंडोज के तहत संकलन करने के लिए और अधिक कर्ल की तरह संशोधित किया गया है।

node-libcurl

उपयोग उदाहरण:

var Curl = require( 'node-libcurl' ).Curl;

var curl = new Curl();

curl.setOpt( Curl.option.URL, 'www.google.com' );
curl.setOpt( 'FOLLOWLOCATION', true );

curl.on( 'end', function( statusCode, body, headers ) {

    console.info( statusCode );
    console.info( '---' );
    console.info( body.length );
    console.info( '---' );
    console.info( headers );
    console.info( '---' );
    console.info( this.getInfo( Curl.info.TOTAL_TIME ) );

    this.close();
});

curl.on( 'error', function( err, curlErrorCode ) {

    console.error( err.message );
    console.error( '---' );
    console.error( curlErrorCode );

    this.close();

});

curl.perform();

प्रदर्शन async है, और वर्तमान में इसका उपयोग करने का कोई तरीका नहीं है (और शायद कभी नहीं होगा)।

यह अभी भी अल्फा में है, लेकिन यह जल्द ही बदलने वाला है, और मदद की सराहना की जा रही है।

अब Easyसिंक अनुरोधों के लिए सीधे हैंडल का उपयोग करना संभव है , उदाहरण:

var Easy = require( 'node-libcurl' ).Easy,
    Curl = require( 'node-libcurl' ).Curl,
    url = process.argv[2] || 'http://www.google.com',
    ret, ch;

ch = new Easy();

ch.setOpt( Curl.option.URL, url );

ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {

    console.log( buf );

    return size * nmemb;
});

ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {

    console.log( arguments );

    return size * nmemb;
});

// this call is sync!
ret = ch.perform();

ch.close();

console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );

इसके अलावा, परियोजना अब स्थिर है!


मैंने नोड-कर्ल और नोड-लिबरल दोनों को स्थापित करने की कोशिश की, लेकिन दोनों ने मुझे एक ही संदेश दिया: "कर्ल की हेडर फ़ाइल नहीं ढूँढ सकता।" यह node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuildकदम के दौरान है । कोई विचार?
सगनरिटुअल

@GreatBigBore आपको अपनी मशीन पर स्थापित libcurl devel पैकेज की आवश्यकता है। यदि आप उदाहरण के लिए डेबियन का उपयोग कर रहे हैं, तो आप इसे$ apt-get install libcurl4-openssl-dev
JCM

1
क्या आप -Lकिसी तरह विकल्प का उपयोग कर सकते हैं ?
corvid

2
हां: CURLOPT_FOLLOWLOCATION , नोड- libcurl के साथ जिसका आप उपयोग करने जा रहे हैं curl.setOpt( 'FOLLOWLOCATION', true );। Btw, इस तरह के प्रश्न इस टिप्पणी अनुभाग की तुलना में मुद्दा ट्रैकर के लिए बेहतर अनुकूल हैं । ;)
जेसीएम

23

संपादित करें:

नई परियोजनाओं के लिए अनुरोध का उपयोग करने से बचना चाहिए, क्योंकि अब परियोजना maitainance मोड में है, और अंत में पदावनत किया जाएगा

https://github.com/request/request/issues/3142

इसके बजाय मैं Axios की सिफारिश करूंगा , पुस्तकालय नोड नवीनतम मानकों के अनुरूप है, और इसे बढ़ाने के लिए कुछ उपलब्ध प्लगइन्स हैं, जो मॉक सर्वर प्रतिक्रियाओं, स्वचालित रिट्री और अन्य सुविधाओं को सक्षम कर सकते हैं।

https://github.com/axios/axios

const axios = require('axios');

// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });

या async / प्रतीक्षा का उपयोग कर:

try{
    const response = await axios.get('/user?ID=12345');
    console.log(response)
} catch(axiosErr){
    console.log(axiosErr)
}

मैं आमतौर पर, Node.js के लिए एक सरल लेकिन शक्तिशाली HTTP क्लाइंट REQUEST का उपयोग करता हूं

https://github.com/request/request

इसकी एनपीएम पर npm install request

यहाँ एक उपयोग नमूना है:

var request = require('request');

request('http://www.google.com', function (error, response, body) {
   if (!error && response.statusCode == 200) {
       console.log(body) // Show the HTML for the Google homepage.
   }
})

9

अगर आपको वास्तव में कर्ल के बराबर की ज़रूरत है, तो आप कोशिश कर सकते हैं node-curl

npm install node-curl

आपको शायद जोड़ना होगा libcurl4-gnutls-dev


8

उपरोक्त उदाहरण काम करते हैं, लेकिन वास्तव में वास्तविक दुनिया के उदाहरण से निपटने के लिए इतनी दूर नहीं जाते हैं (यानी जब आप कई खंडों में आने वाले डेटा को संसाधित करते हैं। एक बात जो आपको सुनिश्चित करने की आवश्यकता है कि आपके पास 'चंक' हैंडलर है) डेटा को किसी सरणी (JS में ऐसा करने का सबसे तेज़ तरीका) और एक 'ऑन एंड' हैंडलर में पुश करें जो उन सभी को एक साथ जोड़ता है ताकि आप इसे वापस कर सकें।

यह विशेष रूप से आवश्यक है जब आप बड़े अनुरोधों (5000+ लाइनों) के साथ काम कर रहे हों और सर्वर आप पर डेटा का एक गुच्छा भेजता है।

यहां मेरे एक कार्यक्रम (कॉफ़ीस्क्रिप्ट) में एक उदाहरण है: https://gist.github.com/1105888



4

अनुरोध जैसे कर्ल बनाने के लिए npm मॉड्यूल है npm curlrequest

चरण 1: $npm i -S curlrequest

चरण 2: अपनी नोड फ़ाइल में

let curl = require('curlrequest')
let options = {} // url, method, data, timeout,data, etc can be passed as options 
curl.request(options,(err,response)=>{
// err is the error returned  from the api
// response contains the data returned from the api
})

आगे पढ़ने और समझने के लिए, एनपीएम कर्लक्वेस्ट


3

अनुरोध npm मॉड्यूल और कॉल के बाद का उपयोग करें

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

सर्वोत्तम अभ्यास के लिए भी कुछ विंस्टन लॉगर मॉड्यूल या अन्य सरल कंसोल का उपयोग करें। फिर अपना एप्लिकेशन जैसे चलाएं

npm start output.txt 

उपरोक्त आदेश का परिणाम रूट पर सभी डेटा के साथ एक txt फ़ाइल उत्पन्न करेगा जिसे आपने कंसोल में प्रिंट किया है


1

मैंने ग्रंट-शेल लाइब्रेरी का उपयोग करके समाप्त किया ।

यहां एजकास्ट एपीआई के साथ काम करने के बारे में किसी और के लिए मेरे पूरी तरह से कार्यान्वित ग्रंट कार्य के लिए मेरा स्रोत है। आप अपने उदाहरण में पाएंगे कि मैं कर्ल कमांड को निष्पादित करने के लिए एक ग्रन्ट-शेल का उपयोग करता हूं जो सीडीएन को शुद्ध करता है।

यह था कि मैं नोड के भीतर काम करने के लिए एक HTTP अनुरोध प्राप्त करने की कोशिश कर घंटों बिताने के बाद समाप्त हुआ। मैं रूबी और पायथन में एक काम करने में सक्षम था, लेकिन इस परियोजना की आवश्यकताओं को पूरा नहीं किया।


1

रीकैलिएंट का उपयोग करता है , यह शीर्ष पर एक छोटा क्लाइंट मॉड्यूल requestहै जो आपको cURL शैली के साथ सभी गतिविधि लॉग करने की अनुमति देता है (वैकल्पिक, विकास के वातावरण के लिए)। इसके अलावा URL और पैरामीटर्स पार्सिंग, ऑथेंटिकेशन इंटीग्रेशन, कैश सपोर्ट आदि जैसे अच्छे फीचर्स हैं।

उदाहरण के लिए, यदि आप क्लाइंट ऑब्जेक्ट बनाते हैं तो एक अनुरोध करें:

var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
        baseUrl:"http://baseurl.com/api/v1.1",
        debugRequest:true, debugResponse:true
    });

var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}})

यह कंसोल के भीतर कुछ इस तरह से प्रवेश करेगा:

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

अनुरोध एक वादा वस्तु लौटाएगा , इसलिए आपको परिणाम के साथ क्या करना है thenऔर catchक्या करना है।

reqclientके साथ उपलब्ध है NPM , आप के साथ मॉड्यूल स्थापित कर सकते हैं: npm install reqclient


1

IOT RaspberryPi से DB को क्लाउड करने के लिए POST डेटा भेजने में मुझे समस्या थी, लेकिन घंटों बाद मैं इसे सीधे प्राप्त करने में कामयाब रहा।

मैंने ऐसा करने के लिए कमांड प्रॉम्प्ट का उपयोग किया।

sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}'

कमांड प्रॉम्प्ट समस्याओं को दिखाएगा - गलत उपयोगकर्ता नाम / पास; खराब अनुरोध आदि

--URL डेटाबेस / सर्वर लोकेशन (मैंने सरल फ्री क्लाउड डीबी का उपयोग किया) - ऑसर प्रमाणीकरण भाग उपयोगकर्ता नाम है: पास मैं एपीआई पास -X के माध्यम से दर्ज किया गया है जो बताता है कि कमांड को क्या कॉल करना है (PUT, GET, POST, DELETE) -H सामग्री प्रकार - क्लाउडेंट दस्तावेज़ डेटाबेस के बारे में है, जहाँ JSON का उपयोग किया जाता है - Data सामग्री स्वयं JSON के रूप में सॉर्ट की जाती है


1

अनुरोध npm मॉड्यूल रिक्वेस्ट नोड मॉल्ड का उपयोग करना अच्छा है, इसके पास विकल्प / पोस्ट अनुरोध प्राप्त करने के लिए विकल्प हैं, साथ ही यह उत्पादन वातावरण में भी व्यापक रूप से उपयोग किया जाता है।


0

आप इस तरह से कुछ का उपयोग करने की कोशिश कर सकते हैं

curl = require('node-curl');
curl('www.google.com', function(err) {
  console.info(this.status);
  console.info('-----');
  console.info(this.body);
  console.info('-----');
  console.info(this.info('SIZE_DOWNLOAD'));
});

0

आप अपने अनुरोध के लिए POSTMAN Chrome ऐप का उपयोग करने का प्रयास कर सकते हैं और आप वहां से नोड जेएस कोड उत्पन्न कर सकते हैं


0

आप अनुरोध एनपीएम मॉड्यूल का उपयोग कर सकते हैं। सुपर सरल उपयोग करने के लिए। अनुरोध http कॉल करने के लिए सबसे आसान तरीका संभव बनाया गया है। यह HTTPS का समर्थन करता है और डिफ़ॉल्ट रूप से पुनर्निर्देश करता है।

var request = require('request');
request('http://www.google.com', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.