如何使用NodeJs请求GET模块发送cookie?

时间:2015-10-26 14:02:32

标签: javascript node.js cookies request

我在NodeJs的一个项目上工作,要求我登录以获取在检索数据时使用的cookie。我已经有以下代码成功登录并返回一个格式正确的cookie:

 var request = require('request');

var requestData = {
  "username":"myUsername",
  "password":"myPassword"
  }

//request post request
request({
    url: 'http://localhost/login',
    method: "POST",
    json: requestData}
    ,function(err, res) {
        if(err){
            console.log("it did not work: " + err)
        }

            console.log(res.statusCode)//logs as 201 sucess
            console.log("heres the cookie: "+res.headers['set-cookie']) //returns cookie in correct format
            var cookie = res.headers['set-cookie']
            //requesting data
            request({
              url: 'http://localhost/delivery-stats',
              method: "GET",
              header: {
                'set-cookie': cookie
              }
            },function(err,response){
                console.log(response.headers) // one of the headers says user is not authorised

            }
            )

});

我的问题是,当我尝试使用附加了cookie的GET请求时,它表示用户未经授权,这意味着cookie未正确传递,任何人都会知道如何使用请求模块执行此操作?感谢

2 个答案:

答案 0 :(得分:11)

几个小时后,我找到了一个解决方案,而不是:

 //requesting data
        request({
          url: 'http://localhost/delivery-stats',
          method: "GET",
          header: {
            'set-cookie': cookie
          }

必须是:

 //requesting data
        request({
          url: 'http://localhost/delivery-stats',
          method: "GET",
          header: {
            'Cookie': cookie
          }

因为这是通过请求发送cookie的正确方法,但是文档记录很少,所以我花了一些时间才弄明白。希望这将有助于将来的某个人。

答案 1 :(得分:1)

对于任何在2019年或之后陷入困境的人来说,向请求添加cookie的正确方法是使用cookie jar属性setCookie。 request的Cookie罐基于艰难的cookie,您可以参考该软件包的文档以获取更多详细信息。

// Require the request     
const request = require('request');

// Setup the cookie jar to carry cookies
const cj = request.jar();

// Add your cookie to the jar (URL is parsed into cookie parts)
cj.setCookie(stateCookie, 'https://yoursite.com/');

// Send your request and include the cookie jar
request(
    'https://request-site.com/api/things', 
    { jar: cj },
    (error, response, body)=>{
        // do things
    }
);