使用 AXIOS (Node.js) 保留请求之间的 cookie

Hai*_*iri 5 cookies node.js axios

$ node -v v10.15.0
"axios": "^0.19.2",
Run Code Online (Sandbox Code Playgroud)

我试图将 cookie 保留在响应标头字段“set-cookie”中 - 就像浏览器一样。我曾经使用过这个模块(https://www.npmjs.com/package/request)并且有一个request.defaults({jar: true})效果很好的选项。

对于 axios,我要求它{withCredentials: true}可以完成这项工作 - 但它不能。

这是一个示例代码:

$ node -v v10.15.0
"axios": "^0.19.2",
Run Code Online (Sandbox Code Playgroud)

控制台结果如下:

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);
  });
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,第一个响应提供了许多要设置的 cookie,但连续的请求不会发送它们。

如何让axios在请求之间保留cookie?

Nic*_*rey 7

嗯...我懒得做困难的事情,所以我只是做这样的事情,使用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);
  });
Run Code Online (Sandbox Code Playgroud)