নোড.জেএস এর সমতুল্য সিআরএল?


152

আমি নোড.জেএস (উদাহরণস্বরূপ একটি দূরবর্তী ওয়েব পরিষেবাতে কল করুন এবং ক্লায়েন্টের প্রতিক্রিয়ার প্রতিধ্বনি) ব্যবহার করে এইচটিটিপি অনুরোধ থেকে তথ্য ব্যবহার করতে চাইছি।

পিএইচপি-তে আমি এটি করতে সিআরএল ব্যবহার করতাম। নোডের সেরা অনুশীলন কী?


13
http.request...
রায়নস

এই সমস্ত সমাধানগুলির সাথে সমস্যাটি হ'ল তাদেরকে কর নিয়ন্ত্রণের প্রয়োজন!
মার্কো

উত্তর:


103

সম্পূর্ণ উদাহরণের জন্য এইচটিটিপি মডিউলের জন্য ডকুমেন্টেশন দেখুন:

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


10
আস্লো উল্লেখ করার মতো মূল্যবান একটি খুব জনপ্রিয় request.js রেভার
Farzher

2
HTTP অনুরোধ y async, কার্ল সিঙ্ক হয়।
ই তথ্য 128

2
@WHK যেমন Node.js প্রকৃতি
slifty

এটির সাথে আমি যে বড় সমস্যাটি দেখতে পাচ্ছি তা হ'ল আপনি কেবল URL টি প্রবেশ করতে পারবেন না এবং প্রতিক্রিয়া পান। এটির অনুরোধ করার জন্য আপনাকে ইউনিটগুলিতে পৃথক করতে হবে। তবে অভিশাপের একটি উপায় সম্ভবত আছে, এটির জন্য কম্যান্ডের মতো একটি কার্ল ব্যবহার করা আরও দৃin় বিশ্বাসযোগ্য।
জোনিস গ্রুজিস

15
এই সাইটটি আপনার cURLকমান্ডটি নোড.জেএস
ম্যাক্সিমাম মাই

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
এটি ওপি চেয়েছে এমন কার্ল-জাতীয় আচরণের তুলনায় এটি খুব নিম্ন স্তরের।
ড্যান ড্যাসক্লেস্কু

1
আজকাল, ব্যবহার: সব request- npmjs.com/package/request - এবং ভোট দিন নীতীশ এর উত্তর, নিচে, যা 2018 ভালো উত্তর
ড্যান Nissenbaum

বাস্তবতায় আপনাকে স্বাগতম: অনুরোধটি অবহেলা করা হয়েছে, github.com/request/request/issues/3142 দেখুন আমার কাছে মনে হয় যে "নিম্ন-স্তরের" অপারেশন এর চেয়ে বেশি সম্ভাবনা রয়েছে, কারণ এটি মোটেও কম নয়, এটি বেসিক
ভিন্ট্রোপেক্ট

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

পারফর্ম হ'ল অ্যাসিঙ্ক, এবং এটি বর্তমানে সিঙ্ক্রোনাস ব্যবহারের কোনও উপায় নেই (এবং সম্ভবত কখনও তা হবে না)।

এটি এখনও আলফাতে রয়েছে তবে এটি শীঘ্রই পরিবর্তন হতে চলেছে, এবং সহায়তার প্রশংসা করা হচ্ছে।

এখন 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পদক্ষেপের সময় । কোন চিন্তা?
সাগানরতুল

@ গ্রেটবিগবোর আপনার নিজের মেশিনে লাইবকারল ডেভেল প্যাকেজ ইনস্টল করা দরকার। আপনি উদাহরণস্বরূপ ডেবিয়ান ব্যবহার করছেন, আপনি এটি দিয়ে ইনস্টল করতে পারেন$ apt-get install libcurl4-openssl-dev
JCM

1
আপনি কি -Lকোনওভাবে বিকল্পটি ব্যবহার করতে পারেন ?
করভিড

2
হ্যাঁ: CURLOPT_FOLLOWLOCATION , নোড-libcurl সহ আপনি ব্যবহার করতে যাচ্ছেন curl.setOpt( 'FOLLOWLOCATION', true );। বিটিডব্লিউ, এর মতো প্রশ্নগুলি এই মন্তব্য বিভাগের চেয়ে ইস্যু ট্র্যাকারের পক্ষে আরও উপযুক্ত । ;)
জেসিএম

23

সম্পাদনা করুন:

নতুন প্রকল্পগুলির জন্য দয়া করে অনুরোধ ব্যবহার করা থেকে বিরত থাকুন, যেহেতু এখন প্রকল্পটি মেরিটেনেন্স মোডে রয়েছে এবং অবশেষে হ্রাস পাবে

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

এর পরিবর্তে আমি অ্যাক্সিয়োসের পরামর্শ দেব , গ্রন্থাগারটি নোডের সর্বশেষ মানগুলির সাথে সামঞ্জস্যপূর্ণ এবং এটি উন্নত করার জন্য কিছু উপলভ্য প্লাগইন রয়েছে যা মক সার্ভারের প্রতিক্রিয়াগুলি, স্বয়ংক্রিয় পুনরায় চেষ্টা এবং অন্যান্য বৈশিষ্ট্য সক্ষম করে।

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

বা অ্যাসিঙ্ক ব্যবহার / অপেক্ষা করুন:

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

আমি সাধারণত রিক্যুয়েস্ট ব্যবহার করি, এটি নোড.জেএস এর জন্য একটি সরলীকৃত তবে শক্তিশালী HTTP ক্লায়েন্ট

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

উপরোক্ত উদাহরণগুলি কাজ করে তবে সত্যিকারের বিশ্বের উদাহরণের সাথে কাজ করে না don't তথ্যগুলিকে একটি অ্যারেতে ঠেলে দিন (জেএসে এটি করার দ্রুততম উপায়) এবং একটি 'শেষ' হ্যান্ডলার যা তাদের সকলের সাথে একসাথে যোগদান করে যাতে আপনি এটি ফিরিয়ে দিতে পারেন।

আপনি যখন বড় অনুরোধগুলি (5000+ লাইন) নিয়ে কাজ করছেন তখন এটি বিশেষত প্রয়োজনীয় এবং সার্ভার আপনাকে একগুচ্ছ ডেটা প্রেরণ করে।

এখানে আমার একটি প্রোগ্রামের একটি উদাহরণ (কফিসিপি): https://gist.github.com/1105888



4

অনুরোধের মতো কার্ল তৈরির জন্য এনপিএম মডিউল রয়েছে, 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

অনুরোধ এনপিএম মডিউল এবং কল পরে ব্যবহার করুন

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

সেরা অনুশীলনের জন্য কিছু উইনস্টন লগার মডিউল বা অন্য কোনও সরল কনসোল.লগ ব্যবহার করুন এবং তারপরে আপনার অ্যাপ্লিকেশনটি চালান run

npm start output.txt 

উপরের কমান্ডের ফলাফলটি আপনাকে কনসোল.লগতে মুদ্রিত সমস্ত ডেটা সহ রুটে একটি টেক্সট ফাইল তৈরি করবে


1

গ্রুর্ট শেল লাইব্রেরিটি ব্যবহার করে শেষ করেছি ।

এখানে EdgeCast এপিআই সঙ্গে কাজ সম্পর্কে অন্য কেউ চিন্তা করার জন্য আমার পুরোপুরি বাস্তবায়িত ঘোঁৎ ঘোঁৎ কাজের জন্য আমার সোর্স সারকথা হয়। আপনি আমার উদাহরণে দেখতে পাবেন যে আমি সিডিএন শুদ্ধ করার কার্ল কমান্ডটি কার্যকর করতে গ্রুর্ট শেল ব্যবহার করি।

এই হ'ল আমি নোডের মধ্যে কাজ করার জন্য এইচটিটিপি অনুরোধ পাওয়ার জন্য কয়েক ঘন্টা চেষ্টা করার পরে শেষ করেছি। আমি রুবি এবং পাইথনে একজনকে কাজ করতে সক্ষম হয়েছি, তবে এই প্রকল্পের প্রয়োজনীয়তা পূরণ করি নি।


1

রিক্লিয়েন্ট ব্যবহার করে , এটি শীর্ষে একটি ছোট ক্লায়েন্ট মডিউল requestযা আপনাকে ক্রিয়াল স্টাইল দিয়ে সমস্ত ক্রিয়াকলাপ লগ করতে দেয় ( , বিকাশের পরিবেশের জন্য) । এছাড়াও ইউআরএল এবং প্যারামিটারগুলি পার্সিং, প্রমাণীকরণের সংহতকরণ, ক্যাশে সমর্থন ইত্যাদির মতো দুর্দান্ত বৈশিষ্ট্য রয়েছে has

উদাহরণস্বরূপ, আপনি যদি ক্লায়েন্ট অবজেক্ট তৈরি করেন তবে একটি অনুরোধ করুন:

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

আইওটি রাস্পবেরিপি থেকে ক্লাউড ডিবিতে পোষ্ট ডেটা প্রেরণে আমার সমস্যা হয়েছিল, তবে কয়েক ঘন্টা পরে আমি সরাসরি এটি পেতে সক্ষম হয়েছি।

আমি এটি করার জন্য কমান্ড প্রম্পট ব্যবহার করেছি।

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"}'

কমান্ড প্রম্পট সমস্যাগুলি দেখাবে - ভুল ব্যবহারকারী নাম / পাস; খারাপ অনুরোধ ইত্যাদি

- ইউআরএল ডাটাবেস / সার্ভারের অবস্থান (আমি সাধারণ নিখরচায় ক্লাউড্যান্ট ডিবি ব্যবহার করেছি) - ব্যবহারকারী হ'ল অনুমোদনের অংশ ব্যবহারকারী নাম: আমি এপিআই পাস দিয়ে প্রবেশ করিয়েছি -X কী কমান্ড কল করতে হবে তা নির্ধারণ করে (পুট, জিইটি, পোস্ট, ডিলেট) -এইচ সামগ্রী - ক্লাউডেন্ট হ'ল ডকুমেন্ট ডাটাবেস সম্পর্কে, যেখানে জেএসওএন ব্যবহৃত হয় - ডেটা সামগ্রী নিজেই জেএসএন হিসাবে সাজানো



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

আপনি আপনার অনুরোধের জন্য পোস্টম্যান ক্রোম অ্যাপ্লিকেশনটি ব্যবহার করে দেখতে পারেন এবং সেখান থেকে নোড জেএস কোড উত্পন্ন করতে পারেন


0

আপনি অনুরোধ এনপিএম মডিউল ব্যবহার করতে পারেন। ব্যবহারের জন্য দুর্দান্ত। অনুরোধটি এইচটিপি কল করার সহজতম উপায় হিসাবে ডিজাইন করা হয়েছে। এটি 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.
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.