Node.js: İstek modülünü kullanarak form verileriyle başlıklar nasıl gönderilir?


111

Aşağıdaki gibi kodum var:

var req = require('request');

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

Bunun için başlıkları nasıl ayarlayabilirim? Kullanıcı aracısına, içerik türüne ve muhtemelen başlıklarda başka bir şeye ihtiyacım var:

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

Birden çok yol denedim ama üstbilgi veya form verisi gönderebilirim, ikisini de gönderemedim.

Yanıtlar:


194

Sonunda başardım. Aşağıdaki kod parçacığını yanıtlayın:

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

yeni Hata fırlat ('tanımsız geçerli bir uri veya seçenekler nesnesi değil.') ^ Hata: tanımsız geçerli bir uri veya seçenekler nesnesi değil. istek üzerine (C: \ Users \ pjt \ node_modules \ request \ index.js: 44: 11) Request._callback'de (C: \ Users \ pjt \ route \ payment.js: 170: 11) Request.self.callback adresinde (C: \ Users \ pjt \ node_modules \ request \ request.js: 186: 22), emitTwo'da (events.js: 106: 13) Request.emit'te (events.js: 194: 7) İstek üzerine. <anonymous> (C: \ Users \ pjt \ node_modules \ request \ request.js: 1163: 10) emitOne'da (events.js: 96: 13) Request.emit'de (events.js: 191: 7)
Tamilselvan K

Bu, aşağıdaki cevabın sadece oluşturacak bir nesneyi oluşturduğu yerde işe yaramadı.
ozzieisaacs

49

Bu çalışmalı.

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

Teşekkürler, ancak bu durumda form verileri düzgün bir şekilde gönderilmiyor gibi görünüyor. .Net'te hemen hemen aynı koda sahibim ve form verisi gönderilmesi durumunda gövdede oturum açma formu olmamalı ve token almalıyım. Yakında buraya göndereceğim, muhtemelen yardımcı olacaktır
Mykola G.

17

Sanırım bunun nedeni HTTP METHOD'u unutmuş olmanız . Varsayılan HTTP istek yöntemi GET'dir.

method: 'POST'Arka ucunuz gönderi yöntemini alırsa eklemelisiniz ve kodunuz çalışacaktır.

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
Okumayı kolaylaştıran stringify'a dayanmadığı için bu daha iyi bir cevaptır.
Keith John Hutchison

6

Bu sorunun çözümünü buldum ve çalışmalıyım bundan eminim çünkü ben de aynı problemle karşılaşıyorum

işte benim çözümüm ----->

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
Cevabımı düzenledim lütfen bakın ve sonra herhangi bir sorun varsa söyleyin. teşekkür ederim
Chetna Joshi

cevabınız doğru ve bana da yardımcı oldu, ancak yalnızca çözümü açıklayan kısa kodu uygulamaya çalışın
Amy

2

Seçeneklerde yöntemi POST olarak ayarlamayı unutmayın. İşte kodum

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);
    }
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.