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

이에 대한 헤더를 어떻게 설정할 수 있습니까? user-agent, content-type 및 아마도 헤더에 다른 것이 필요합니다.

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

throw new Error ( 'undefined는 유효한 URI 또는 ​​옵션 개체가 아닙니다.') ^ 오류 : undefined는 유효한 URI 또는 ​​옵션 개체가 아닙니다. Request.self.callback의 Request._callback (C : \ Users \ pjt \ routes \ payment.js : 170 : 11)에서 요청시 (C : \ Users \ pjt \ node_modules \ request \ index.js : 44 : 11) (C : \ Users \ pjt \ node_modules \ request \ request.js : 186 : 22) emitTwo (events.js : 106 : 13) at Request.emit (events.js : 194 : 7) at Request. <anonymous> (C : \ Users \ pjt \ node_modules \ request \ request.js : 1163 : 10) at emitOne (events.js : 96 : 13) at Request.emit (events.js : 191 : 7)
Tamilselvan K

이것은 단지 형성 할 객체를 설정하는 아래 대답이 그랬던 곳에서는 작동하지 않았습니다.
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'백엔드가 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
더 읽기 쉽게 stringify에 의존하지 않기 때문에 더 나은 대답입니다.
Keith John Hutchison

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
나는 내 대답을 편집 한 다음 그 문제가 있으면 말하십시오. 감사합니다
Chetna 조시에게

귀하의 대답은 맞고 저도 도왔습니다.하지만 해결책만을 설명하는 짧은 코드를 구현해보십시오
Amy

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);
    }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.