我在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
}
)
});
我的问题是,当我尝试使用附加了cookie的GET请求时,它表示用户未经授权,这意味着cookie未正确传递,任何人都会知道如何使用请求模块执行此操作?感谢
答案 0 :(得分:11)
几个小时后,我找到了一个解决方案,而不是:
//requesting data
request({
url: 'http://localhost/delivery-stats',
method: "GET",
header: {
'set-cookie': cookie
}
必须是:
//requesting data
request({
url: 'http://localhost/delivery-stats',
method: "GET",
header: {
'Cookie': cookie
}
因为这是通过请求发送cookie的正确方法,但是文档记录很少,所以我花了一些时间才弄明白。希望这将有助于将来的某个人。
答案 1 :(得分:1)
对于任何在2019年或之后陷入困境的人来说,向请求添加cookie的正确方法是使用cookie jar属性setCookie。 request的Cookie罐基于艰难的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
}
);