You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python CLI发送POST请求登录Passport.js后如何维持会话状态?

问题根源

REST-client这类工具会自动处理响应里的Set-Cookie头,后续请求自动带上会话Cookie;但Python CLI的HTTP请求默认不会保存和复用Cookie,所以每次请求都是全新会话,自然无法维持登录状态。

解决办法

1. 用requests.Session自动管理会话

requests库的Session对象会自动保存登录响应的Cookie,后续请求自动携带,这是最省心的方式:

import requests

# 初始化会话
session = requests.Session()

# 执行登录
login_payload = {"username": "你的用户名", "password": "你的密码"}
login_res = session.post("http://你的API域名/login", data=login_payload)
if login_res.status_code == 200:
    print("登录成功")

# 后续请求自动带会话Cookie
protected_res = session.get("http://你的API域名/需要登录的接口")
print(protected_res.json())

2. 手动提取并携带Cookie

如果不想用Session,可以手动提取登录响应里的会话Cookie(默认是connect.sid,取决于你express-session的name配置),然后在后续请求的头里加上:

import requests

# 登录请求
login_payload = {"username": "你的用户名", "password": "你的密码"}
login_res = requests.post("http://你的API域名/login", data=login_payload)

# 提取会话Cookie
session_cookie = login_res.cookies.get("connect.sid")

# 后续请求手动加Cookie头
headers = {"Cookie": f"connect.sid={session_cookie}"}
protected_res = requests.get("http://你的API域名/需要登录的接口", headers=headers)
print(protected_res.json())

3. 确认Express端的会话配置

先确保你的express-session和跨域配置没问题:

  • 跨域场景下,cors要开启credentials: true,同时客户端请求要允许携带凭证(requests.Session默认会处理)
  • express-session的cookie配置要合理,比如httpOnly、maxAge、domain(如果跨域的话)

Express端示例配置:

const session = require('express-session');
const cors = require('cors');

// 跨域配置
app.use(cors({
  origin: "http://你的Python客户端所在地址", // 或者按需设置
  credentials: true
}));

// 会话配置
app.use(session({
  secret: "你的加密密钥",
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: false, // 生产环境建议开HTTPS并设为true
    httpOnly: true,
    maxAge: 86400000 // 会话有效期1天
  }
}));
关键提醒
  • 确保Python请求的域名/IP和REST-client一致,避免Cookie的域不匹配导致无法携带
  • 如果API用了HTTPS,Python请求要信任对应证书(生产环境别关验证)
  • 检查express-session的name配置,确保提取的Cookie名和配置一致

内容的提问来源于stack exchange,提问作者gotter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:06:13