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

Tom*_*mas 5 javascript cookies request node.js

我正在研究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

            }
            )

});
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*mas 13

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

 //requesting data
        request({
          url: 'http://localhost/delivery-stats',
          method: "GET",
          header: {
            'set-cookie': cookie
          }
Run Code Online (Sandbox Code Playgroud)

它必须是:

 //requesting data
        request({
          url: 'http://localhost/delivery-stats',
          method: "GET",
          header: {
            'Cookie': cookie
          }
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*del 5

对于在 2019 年以上遇到此问题的任何人,将 cookie 添加到请求的正确方法是使用 cookie jar 属性 setCookie。request 的cookie jar 基于tough-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
    }
);
Run Code Online (Sandbox Code Playgroud)