Node.js: Làm cách nào để gửi tiêu đề với dữ liệu biểu mẫu bằng mô-đun yêu cầu?


111

Tôi có mã như sau:

var req = require('request');

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

Làm cách nào để đặt tiêu đề cho điều này? Tôi cần tác nhân người dùng, loại nội dung và có thể là một cái gì đó khác trong tiêu đề:

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

Tôi đã thử theo nhiều cách nhưng tôi có thể gửi tiêu đề hoặc dữ liệu biểu mẫu, không gửi được cả hai.

Câu trả lời:


194

Cuối cùng tôi đã làm được. Trả lời trong đoạn mã dưới đây:

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

ném mới Lỗi ('undefined không phải là đối tượng uri hoặc tùy chọn hợp lệ.') ^ Lỗi: undefined không phải là đối tượng uri hoặc tùy chọn hợp lệ. theo yêu cầu (C: \ Users \ pjt \ node_modules \ request \ index.js: 44: 11) tại Request._callback (C: \ Users \ pjt \ lines \ Payment.js: 170: 11) tại Request.self.callback (C: \ Users \ pjt \ node_modules \ request \ request.js: 186: 22) tại releaseTwo (sự kiện.js: 106: 13) tại Request.emit (sự kiện.js: 194: 7) theo yêu cầu. <Ẩn danh> (C: \ Users \ pjt \ node_modules \ request \ request.js: 1163: 10) tại releaseOne (sự kiện.js: 96: 13) tại Request.emit (sự kiện.js: 191: 7)
Tamilselvan K

Điều này không hiệu quả đối với tôi khi câu trả lời bên dưới chỉ đặt một đối tượng để tạo thành.
ozzieisaacs

49

Điều này sẽ hoạt động.

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

Cảm ơn, nhưng có vẻ như trong trường hợp này, dữ liệu biểu mẫu không được gửi theo cách thích hợp. Tôi có mã gần như giống nhau trong .Net và trong trường hợp dữ liệu biểu mẫu được gửi, tôi không nên có biểu mẫu đăng nhập trong nội dung và phải có mã thông báo. Tôi sẽ đăng nó ở đây sớm, có lẽ nó sẽ giúp
Mykola G.

17

Tôi nghĩ đó chỉ là do bạn đã quên HTTP METHOD . Phương thức yêu cầu HTTP mặc định là GET.

Bạn nên thêm method: 'POST'và mã của bạn sẽ hoạt động nếu chương trình phụ trợ của bạn nhận được phương thức đăng.

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
Đây là một câu trả lời tốt hơn vì nó không dựa vào chuỗi ký tự nên dễ đọc hơn.
Keith John Hutchison

6

Tôi đã tìm ra giải pháp cho vấn đề này và tôi nên làm việc. Tôi chắc chắn về điều này vì tôi cũng gặp phải vấn đề tương tự

đây là giải pháp của tôi ----->

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
Tôi đã chỉnh sửa câu trả lời của mình, vui lòng xem và sau đó nói nếu có bất kỳ vấn đề nào trong đó. cảm ơn bạn
Chetna Joshi 11/09/18

câu trả lời của bạn là đúng và cũng đã giúp tôi, nhưng hãy cố gắng triển khai mã ngắn chỉ giải thích giải pháp
Amy

2

Chỉ cần nhớ đặt phương thức thành ĐĂNG trong các tùy chọn. Đây là mã của tôi

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);
    }
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.