[英]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.