簡體   English   中英

你如何處理帶有請求承諾的 cookie?

[英]How do you handle cookies with request-promise?

我在抓取需要身份驗證的網站時遇到問題,並且正在使用會話 cookie。 會話需要一個帶有 POST 的請求,然后認證通過。 但是當我想獲取需要身份驗證的網頁時,它返回“未授權”。 我想我需要一種方法來將會話 cookie 與 GET 請求一起帶入,但我不知道如何! 我的依賴項是 request-promise( https://www.npmjs.com/package/request-promise )。

代碼如下所示:

var rp = require("request-promise");

    var options = {
    method: "POST",
    uri: "http://website.com/login",
    form: {
        username: "user",
        password: "pass",
    },
    headers: {},
    simple: false
};

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

我猜您必須將請求放入“Jar”( https://github.com/request/request#requestjar )中,才能到達下一個請求 URL,但是我該如何設置請求-承諾創建一個cookie-jar?

您的問題是如何在身份驗證后保持會話。 這意味着,使用用戶名和密碼登錄后,服務器將返回一個帶有標識符的 cookie。 然后您需要將該 cookie 附加到您的所有功能請求中。
request-promise很簡單。 只需通過啟用jar選項來保持跟蹤會話,然后對所有請求使用相同的request對象。 讓我們看看

var request = require("request-promise").defaults({ 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)
})

在進行休息調用時使用以下對象。

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

然后撥打電話。 有關request-promise 的更多詳細信息: https : //www.npmjs.com/package/request-promise

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM