Node.js: अनुरोध मॉड्यूल का उपयोग करके फॉर्म डेटा के साथ हेडर कैसे भेजें?


111

मेरे पास निम्नलिखित की तरह कोड है:

var req = require('request');

req.post('someUrl',
   { form: { username: 'user', password: '', opaque: 'someValue', logintype: '1'}, },
   function (e, r, body) {
      console.log(body);
});

मैं इसके लिए हेडर कैसे सेट कर सकता हूं? मुझे हेडर में उपयोगकर्ता-एजेंट, सामग्री-प्रकार और संभवतः कुछ और चाहिए:

headers = { 
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
   'Content-Type' : 'application/x-www-form-urlencoded' 
};

मैंने कई तरीकों से कोशिश की है, लेकिन मैं हेडर या फॉर्म-डेटा भेज सकता हूं, दोनों भेजने में विफल।

जवाबों:


194

मैं आखिरकार ऐसा करने में कामयाब रहा। नीचे दिए गए कोड स्निपेट में उत्तर दें:

var querystring = require('querystring');
var request = require('request');

var form = {
    username: 'usr',
    password: 'pwd',
    opaque: 'opaque',
    logintype: '1'
};

var formData = querystring.stringify(form);
var contentLength = formData.length;

request({
    headers: {
      'Content-Length': contentLength,
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    uri: 'http://myUrl',
    body: formData,
    method: 'POST'
  }, function (err, res, body) {
    //it works!
  });

नई त्रुटि फेंकें ('अपरिभाषित एक वैध यूरी या विकल्प ऑब्जेक्ट नहीं है।') ^ त्रुटि: अपरिभाषित एक वैध यूआरआई या विकल्प वस्तु नहीं है। अनुरोध पर (C: \ Users \ pjt \ node_modules \ request \ index.js: 44: 11) Request._callback पर (C: \ Users \ pjt \ मार्गों \ payment.js: 170: 11: Request.self.callback पर। (C: \ Users \ pjt \ node_modules \ request_js: 186: 22) emitTwo पर (इवेंट्स.js: 106: 13) Request.emit पर (इवेंट्स.js: 194: 7) अनुरोध पर। <अनाम>। (C: \ Users \ pjt \ node_modules \ request_js: 1163: 10) emitOne पर (इवेंट.js: 96: 13) Request.emit पर (इवेंट .js: 191, 7)
तमिलसेल्वन के

यह मेरे लिए काम नहीं किया, जहां नीचे का जवाब जो बस एक ऑब्जेक्ट सेट करने के लिए किया था।
ozzieisaacs

49

यह काम करना चाहिए।

var url = 'http://<your_url_here>';
var headers = { 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0',
    'Content-Type' : 'application/x-www-form-urlencoded' 
};
var form = { username: 'user', password: '', opaque: 'someValue', logintype: '1'};

request.post({ url: url, form: form, headers: headers }, function (e, r, body) {
    // your callback body
});

धन्यवाद, लेकिन इस मामले में ऐसा लगता है कि प्रपत्र डेटा को उचित तरीके से नहीं भेजा गया है। मेरे पास .Net में लगभग एक ही कोड है और यदि डेटा फॉर्म भेजा जाता है तो मुझे शरीर में लॉगिन फॉर्म नहीं होना चाहिए और टोकन होना चाहिए। मैं इसे जल्द ही यहाँ पोस्ट करूँगा, शायद इससे मदद मिलेगी
Mykola G.

17

मुझे लगता है कि यह सिर्फ इसलिए है क्योंकि आप HTTP METHOD को भूल गए हैं । डिफ़ॉल्ट HTTP अनुरोध विधि GET है।

method: 'POST'यदि आपका बैकएंड पोस्ट विधि प्राप्त करता है तो आपको जोड़ना चाहिए और आपका कोड काम करेगा।

var req = require('request');

req.post({
   url: 'someUrl',
   form: { username: 'user', password: '', opaque: 'someValue', logintype: '1'},
   headers: { 
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
      'Content-Type' : 'application/x-www-form-urlencoded' 
   },
   method: 'POST'
  },

  function (e, r, body) {
      console.log(body);
  });

1
यह एक बेहतर जवाब है क्योंकि यह कड़े पर निर्भर नहीं करता है जिससे इसे पढ़ना आसान हो जाता है।
कीथ जॉन हचिसन

6

मुझे इस समस्या का हल मिल गया और मुझे इस बारे में निश्चित रूप से काम करना चाहिए क्योंकि मैं भी इस समस्या का सामना करता हूँ

यहाँ मेरा समाधान -----> है

var request = require('request');

//set url
var url = 'http://localhost:8088/example';

//set header
var headers = {
    'Authorization': 'Your authorization'
};

//set form data
var form = {first_name: first_name, last_name: last_name};

//set request parameter
request.post({headers: headers, url: url, form: form, method: 'POST'}, function (e, r, body) {

    var bodyValues = JSON.parse(body);
    res.send(bodyValues);
});

1
मैंने अपना उत्तर संपादित किया है, कृपया देखें और फिर कहें कि क्या इसमें कोई समस्या है। धन्यवाद
चेतना जोशी

आपका उत्तर सही है और इसने मेरी मदद भी की है, लेकिन लघु कोड को लागू करने का प्रयास करें जो केवल समाधान की व्याख्या करता है
एमी

2

विकल्पों में POST के लिए सेट विधि को याद रखें। यहाँ मेरा कोड है

var options = {
    url: 'http://www.example.com',
    method: 'POST', // Don't forget this line
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'X-MicrosoftAjax': 'Delta=true', // blah, blah, blah...
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
    },
    form: {
        'key-1':'value-1',
        'key-2':'value-2',
        ...
    }
};

//console.log('options:', options);

// Create request to get data
request(options, (err, response, body) => {
    if (err) {
        //console.log(err);
    } else {
        console.log('body:', body);
    }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.