Nodejs 脚本遇到重定向时,怎么携带 httponly 的 cookie?
写一个馒头的定时登录脚本,在青龙中运行,node
的CommonJS
模式(非ES
模式)
POST 登录成功后,会在响应头中指定location
重定向到首页,此时需要携带httponly
的cookie
访问首页
试了用node
18 自带的fetch
和第三方的node-fetch
、axios
,设置了credentials
为true
、include
,但重定向还是不发送cookie
。导致重定向到首页后,因为没有携带登录cookie
又被重定向到登录页面
特别是axios
,怎么重定向时携带之前响应头中set-cookie
的 cookie (已设置withCredentials: true
)
Nodejs 脚本遇到重定向时,怎么携带 httponly 的 cookie?
在浏览器中是浏览器帮你带了 cookie ,node 这种就相当于一个新的 post 了,所以在你登陆的时候你可以拿到 response 的 cookie ,然后保存下来,下次请求的时候自己带上
话说这种东西为什么要自己写,nas-tool 或者 moviepilot 不好用吗
是同一次执行中,不是两次执行,应该会自动携带响应的 set-cookie 吧,不过我看 gpt 说,只有在自动重定向时不会携带,此时需要手动调用 axios.get()一次
用 Axios + https://github.com/3846masa/axios-cookiejar-support 试试呢
谢谢。gpt 又说错了,还是照 提取响应头的 cookie 后携带的
在 Node.js 中处理 HTTP 重定向时,若需要携带 HttpOnly
的 cookie,通常这些 cookie 会由浏览器自动管理。然而,在服务器端脚本(如 Node.js)进行重定向时,直接操作 HttpOnly
cookie 是不可能的,因为这些 cookie 不能被脚本访问,以增强安全性。
不过,你可以通过以下方式间接处理重定向,并确保 HttpOnly
cookie 被正确携带:
-
服务器端重定向:让服务器处理重定向,并确保在响应头中正确设置
Set-Cookie
。浏览器会自动携带这些HttpOnly
cookie 进行后续请求。 -
使用重定向状态码:使用 HTTP 状态码如 302(Found)或 307(Temporary Redirect)来指示客户端重定向。
示例代码(使用 Express.js):
const express = require('express');
const app = express();
app.get('/redirect', (req, res) => {
// 设置 HttpOnly cookie
res.cookie('myCookie', 'cookieValue', { httpOnly: true });
// 重定向
res.redirect(302, '/target');
});
app.get('/target', (req, res) => {
res.send('Target page reached');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
在这个例子中,当访问 /redirect
时,服务器设置一个 HttpOnly
cookie,并重定向到 /target
。浏览器会自动携带这个 HttpOnly
cookie 到新的位置。
注意,直接在 Node.js 脚本中管理和携带 HttpOnly
cookie 是不可能的,这也是出于安全考虑。