你如何处理请求承诺的cookie?

时间:2017-02-06 10:22:25

标签: javascript angularjs session cookies

我在抓取需要身份验证的网站时遇到问题,并且正在使用会话Cookie。会话需要POST请求,然后验证然后批准。但是当我想获取需要身份验证的网页时,它会返回" Unauthorized"。我想我需要一种方法来将会话cookie与GET请求联系起来,但我不知道怎么做!我的依赖项是请求 - 承诺(https://www.npmjs.com/package/request-promise)。

代码如下所示:

ListingsModule

我猜你必须把请求放在" Jar" (https://github.com/request/request#requestjar),以便能够到达下一个请求URL,但是如何设置请求承诺来创建cookie-jar?

2 个答案:

答案 0 :(得分:2)

您的问题是如何在身份验证后保留会话。 这意味着,在使用用户名和密码登录后,服务器将返回带有标识的cookie。然后,您需要将该cookie附加到您的所有功能请求中 使用request-promise很简单。只需通过启用jar选项继续跟踪会话,然后对所有请求使用相同的request对象。 我们来看看

var request = require("request-promise").default({jar: true});
var options = {
    method: "POST",
    uri: "http://website.com/login",
    form: {
        username: "user",
        password: "pass",
    },
    headers: {},
    simple: false
};

request(options).then(function(response) {
    request("http://website.com/login/AuthPage", function(err, res, body) {
        console.log(body);
    })
}).catch(function(e) {
    console.log(e)
})

答案 1 :(得分:2)

在进行剩余呼叫时使用以下对象。

var request = require("request-promise").defaults({jar: true});

添加自己的Cookie

var tough = require('tough-cookie');

// Easy creation of the cookie - see tough-cookie docs for details
let cookie = new tough.Cookie({
    key: "some_key",
    value: "some_value",
    domain: 'api.mydomain.com',
    httpOnly: true,
    maxAge: 31536000
});

// Put cookie in an jar which can be used across multiple requests
var cookiejar = rp.jar();
cookiejar.setCookie(cookie, 'https://api.mydomain.com');
// ...all requests to https://api.mydomain.com will include the cookie

var options = {
    uri: 'https://api.mydomain.com/...',
    jar: cookiejar // Tells rp to include cookies in jar that match uri
};

,然后拨打电话。有关请求承诺的更多详细信息:  https://www.npmjs.com/package/request-promise