Node.js: Wie sende ich Header mit Formulardaten mithilfe des Anforderungsmoduls?

111

Ich habe folgenden Code:

var req = require('request');

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

Wie kann ich dafür Header setzen? Ich brauche User-Agent, Content-Type und wahrscheinlich etwas anderes, um in den Headern zu sein:

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

Ich habe es auf verschiedene Arten versucht, aber ich kann entweder Header- oder Formulardaten senden, konnte jedoch nicht beide senden.

Mykola G.
quelle

Antworten:

194

Ich habe es endlich geschafft. Antwort im Code-Snippet unten:

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!
  });
Mykola G.
quelle
neuen Fehler auslösen ('undefined ist kein gültiges Uri- oder Optionsobjekt.') ^ Fehler: undefined ist kein gültiges Uri- oder Optionsobjekt. auf Anfrage (C: \ Benutzer \ pjt \ Knotenmodule \ Anfrage \ Index.js: 44: 11) bei Request._callback (C: \ Benutzer \ pjt \ Routen \ Zahlung.js: 170: 11) bei Request.self.callback (C: \ Users \ pjt \ node_modules \ request \ request.js: 186: 22) bei emitTwo (events.js: 106: 13) bei Request.emit (events.js: 194: 7) bei Request. <Anonymous> (C: \ Users \ pjt \ node_modules \ request \ request.js: 1163: 10) bei emitOne (events.js: 96: 13) bei Request.emit (events.js: 191: 7)
Tamilselvan K
Dies funktionierte bei mir nicht, wo die Antwort, die nur ein Objekt formt, dies tat.
Ozzieisaacs
49

Das sollte funktionieren.

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
});
user606521
quelle
Vielen Dank, aber in diesem Fall scheinen die Formulardaten nicht ordnungsgemäß gesendet zu werden. Ich habe fast den gleichen Code in .Net und falls Formulardaten gesendet werden, sollte ich kein Anmeldeformular im Text haben und sollte ein Token haben. Ich werde es bald hier posten, wahrscheinlich wird es helfen
Mykola G.
17

Ich denke, das liegt nur daran, dass Sie die HTTP-Methode vergessen haben . Die Standard-HTTP-Anforderungsmethode ist GET.

Sie sollten hinzufügen method: 'POST'und Ihr Code wird funktionieren, wenn Ihr Backend die Post-Methode erhält.

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);
  });
nodejh
quelle
1
Dies ist eine bessere Antwort, da es nicht auf Stringify angewiesen ist, was das Lesen erleichtert.
Keith John Hutchison
6

Ich habe die Lösung für dieses Problem gefunden und sollte arbeiten. Ich bin mir sicher, da ich auch vor dem gleichen Problem stehe

Hier ist meine Lösung ----->

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);
});
Chetna Joshi
quelle
1
Ich habe meine Antwort bearbeitet. Bitte sehen Sie und sagen Sie dann, ob dies ein Problem darstellt. Vielen Dank
Chetna Joshi
Ihre Antwort ist richtig und hat mir auch geholfen, aber versuchen Sie, einen Kurzcode zu implementieren, der nur die Lösung erklärt
Amy
2

Denken Sie daran, die Methode in den Optionen auf POST zu setzen. Hier ist mein Code

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