使用 AXIOS (Node.js) 在请求之间保留 cookie
Posted
技术标签:
【中文标题】使用 AXIOS (Node.js) 在请求之间保留 cookie【英文标题】:Perserve cookies between requests using AXIOS (Node.js) 【发布时间】:2020-12-26 16:43:47 【问题描述】:$节点-v v10.15.0 "axios": "^0.19.2",
我试图阻止响应标头字段“set-cookie”中的 cookie - 就像浏览器一样。 我曾经使用过这个模块(https://www.npmjs.com/package/request),并且有一个选项 request.defaults(jar: true) 效果很好。
对于 axios,我要求 withCredentials: true 可以完成这项工作 - 但它没有。
这是一个示例代码:
axios( url: 'https://google.com/', method: 'get', withCredentials: true )
.then((res) =>
console.log('res.headers = ', res.headers);
)
.catch((err) =>
console.log('ERROR >>>> ', err);
);
axios( url: 'https://google.com/', method: 'get', withCredentials: true )
.then((res) =>
// console.log("res.headers = ", res.headers);
console.log('REQUEST HEADERS: ', res.request._header);
)
.catch((err) =>
console.log('ERROR >>>> ', err);
);
控制台结果如下:
res.headers =
date: 'Tue, 08 Sep 2020 09:42:24 GMT',
expires: '-1',
'cache-control': 'private, max-age=0',
'content-type': 'text/html; charset=ISO-8859-1',
p3p: 'CP="This is not a P3P policy! See g.co/p3phelp for more info."',
server: 'gws',
'x-xss-protection': '0',
'x-frame-options': 'SAMEORIGIN',
'set-cookie': [
'1P_JAR=2020-09-08-09; expires=Thu, 08-Oct-2020 09:42:24 GMT; path=/; domain=.google.com; Secure',
'NID=204=hqIOtyoskrispJi7WvceHmix8PF_tVmV6FArMX_LwcvaFRNYzTj85TZp-MXsmOXL0STJBUX0LjsUXpuPF__yx7urLiXyxFKiFsi8RpPheqyrP4XNTwrHXqXPQVqxY0KEpO_XS9ITMVrMGJ5GBSfQB4Ii63o6x4icknqZ-1k4FA8; expires=Wed, 10-Mar-2021 09:42:24 GMT; path=/; domain=.google.com; HttpOnly',
],
'alt-svc':
'h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
'accept-ranges': 'none',
vary: 'Accept-Encoding',
connection: 'close',
'transfer-encoding': 'chunked',
;
REQUEST HEADERS: GET / HTTP/1.1 Accept: application/json, text/plain, */* User-Agent: axios/0.19.2 Host: www.google.com Connection: close
如您所见,第一个响应提供了许多要设置的 cookie,但连续请求不会发送它们。
如何让axios在请求之间保留cookie?
【问题讨论】:
您可以尝试将第二个 axios 请求移动到第一个的.then
部分吗?我想知道第二个是否在收到第一个响应之前执行...
Ping @Hairi - 你试过了吗?
***.com/questions/43002444/… 可能适合您的目的。或带有 cookie jar npm 包的 axios
【参考方案1】:
嗯...我懒得用辛苦的方式做事,所以我会做这样的事情,使用axios-cookie-jar-support:
const axios = require('axios').default;
const axiosCookieJarSupport = require('axios-cookiejar-support').default;
const tough = require('tough-cookie');
axiosCookieJarSupport(axios);
const cookieJar = new tough.CookieJar();
axios
.get('https://google.com',
jar: cookieJar, // tough.CookieJar or boolean
withCredentials: true, // If true, send cookie stored in jar
)
.then(() =>
console.log(cookieJar);
);
【讨论】:
以上是关于使用 AXIOS (Node.js) 在请求之间保留 cookie的主要内容,如果未能解决你的问题,请参考以下文章