كيفية عمل طلب HTTP POST في node.js؟



Answers

يصبح هذا أسهل كثيرًا إذا كنت تستخدم مكتبة request .

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

بصرف النظر عن توفير بنية لطيفة ، فإنه يجعل طلبات json سهلة ، ويتناول توقيع oauth (للتويتر ، إلخ) ، ويمكنه عمل نماذج متعددة الأجزاء (على سبيل المثال لتحميل الملفات) والبث.

لتثبيت طلب استخدام الأمر npm install request

Question

كيف يمكنني عمل طلب HTTP POST صادر ، مع البيانات ، في node.js؟




أستخدم Restler و Needle لأغراض الإنتاج. كلاهما أقوى بكثير من httprequest الأصلي. من الممكن طلب المصادقة الأساسية أو إدخال رأس خاص أو حتى تحميل / تنزيل الملفات.

أما بالنسبة إلى عملية النشر / التشغيل ، فهي أيضًا أسهل بكثير من استخدام مكالمات ajax الخام باستخدام httprequest.

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



لأولئك القادمين هنا في السنوات الأخيرة. توجد الآن مجموعة متنوعة من المكتبات المختلفة التي يمكنها إنجاز ذلك بأقل تشفير. أنا أفضل المكتبات خفيفة الوزن أنيقة لطلبات HTTP إلا إذا كنت بحاجة إلى السيطرة على الاشياء HTTP مستوى منخفض.

إحدى هذه المكتبات هي Unirest

لتثبيته ، استخدم npm .
$ npm install unirest

وعلى Hello, World! على سبيل المثال أن الجميع اعتادوا على.

var unirest = require('unirest');

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


إضافي:
الكثير من الناس يقترحون أيضا استخدام request https://www.npmjs.com/package/request

تجدر الإشارة إلى أنه من خلف الكواليس ، تستخدم Unirest مكتبة request .

يوفر Unirest أساليب للوصول إلى كائن الطلب مباشرة.

مثال:

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






إذا كنت تبحث عن طلبات HTTP القائمة على وعد ، فإن axios تقوم بعملها بشكل جيد.

  const axios = require('axios');

  axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });



لنشر بقية / JSON طلب
يمكننا ببساطة استخدام حزمة الطلب وحفظ القيم التي نرسلها في متغير Json.

أولاً قم بتثبيت الحزمة المطلوبة في وحدة التحكم الخاصة بك بواسطة طلب تثبيت npm - حفظ

var request = require('request');

    var options={
                'key':'28',
                'key1':'value',
                'key2':'value'
                }

    request({
             url:"http://dev.api.ean.com/ean-services/rs/hotel/v3/ping?                      
                 minorRev="+options.key+
                 "&cid="+options.key1+
                 "&apiKey="+options.key2,
             method:"POST",
             json:true},function(error,response,body){
                     console.log(body)
               }
    );



نشر مثال axios آخر لطلب axios.post الذي يستخدم خيارات تكوين إضافية ورؤوس مخصصة.

var postData = {
  email: "test@test.com",
  password: "password"
};

let axiosConfig = {
  headers: {
      'Content-Type': 'application/json;charset=UTF-8',
      "Access-Control-Allow-Origin": "*",
  }
};

axios.post('http://<host>:<port>/<path>', postData, axiosConfig)
.then((res) => {
  console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
  console.log("AXIOS ERROR: ", err);
})




بعد أن تكافح الكثير أثناء إنشاء أداة ذات مستوى منخفض للتعامل مع البريد والحصول على طلبات لمشروعي ، قررت أن أنشر جهودي هنا. كثيرًا في أسطر الإجابة المقبولة ، إليك مقتطف لجعل طلبات HTTP و https POST لإرسال بيانات JSON.

const http = require("http")
const https = require("https")

// Request handler function
let postJSON = (options, postData, callback) => {

    // Serializing JSON
    post_data = JSON.stringify(postData)

    let port = options.port == 443 ? https : http

    // Callback function for the request
    let req = port.request(options, (res) => {
        let output = ''
        res.setEncoding('utf8')

        // Listener to receive data
        res.on('data', (chunk) => {
            output += chunk
        });

        // Listener for intializing callback after receiving complete response
        res.on('end', () => {
            let obj = JSON.parse(output)
            callback(res.statusCode, obj)
        });
    });

   // Handle any errors occurred while making request
    req.on('error', (err) => {
        //res.send('error: ' + err.message)
    });

    // Request is made here, with data as string or buffer
    req.write(post_data)
    // Ending the request
    req.end()
};

let callPost = () => {

    let data = {
        'name': 'Jon',
        'message': 'hello, world'
    }

    let options = {
        host: 'domain.name',       // Your domain name
        port: 443,                 // 443 for https and 80 for http
        path: '/path/to/resource', // Path for the request
        method: 'POST',            
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(data)
        }
    }

    postJSON(options, data, (statusCode, result) => {
        // Handle response
        // Process the received data
    });

}



Related