Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I send cookie using NodeJs request GET module?

I'm working on a project in NodeJs that requires me to login to get a cookie which would be used when retrieving data. I've got following code which succeeds to log in and return me a cookie with correct formatting:

 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

            }
            )

});

My problem is that when i try to do GET request with cookie attached to it it says that user is unauthorised, which means that the cookie was not passed correctly, anyone would know on how to do this using request module? Thanks

like image 445
Tomas Avatar asked Oct 26 '15 14:10

Tomas


People also ask

Can a get request set cookies?

Also I would say it is perfectly acceptable to change or set a cookie in response for the GET request because you just return some data.

How do I send cookies in a post request?

To send cookies to the server, you need to add the "Cookie: name=value" header to your request. To send multiple Cookies in one cookie header, you can separate them with semicolons. In this Send Cookies example, we are sending HTTP cookies to the ReqBin echo URL.


1 Answers

For anyone stumbling across this in 2019+, the correct way to add a cookie to a request is using the cookie jar property setCookie. request's cookie jar is based on tough-cookie, and you can reference that package's documentation for more detail.

// 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
    }
);
like image 182
Matt van Andel Avatar answered Oct 03 '22 04:10

Matt van Andel