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

Python脚本POST登录服务器失败,如何保存认证Cookie?

解决Python POST登录失败&自动管理认证Cookie的问题

嘿,作为新手遇到这种Postman能跑但脚本不行的问题太正常了,别慌!咱们一步步来解决:

先找你当前脚本的核心问题

你收到500错误,大概率不是Cookie的问题(毕竟登录请求还没成功,还没拿到Cookie呢),而是请求格式不规范:

  • 你手动把payload写成了JSON字符串,但没有告诉服务器这是JSON格式的请求体——Postman会自动帮你设置Content-Type: application/json请求头,但你的Python脚本没做这件事,服务器没法解析你的请求,所以返回了500错误。
  • 另外,手动拼接JSON字符串很容易出现语法错误,不如用Python字典让requests帮你处理序列化。

正确的解决方案:用Session自动管理Cookie+规范请求格式

requests的Session对象会自动帮你保存登录后拿到的Cookie,后续所有用这个Session发的请求都会自动带上认证Cookie,完美解决你后续请求的认证问题。

修改后的脚本长这样:

import requests

# 创建一个Session对象,专门用来自动管理Cookie
session = requests.Session()

url = "http://172.125.169.21/api/user/login"
# 用字典编写payload,比手动拼JSON字符串靠谱且不易出错
payload = {
    "name": "test5",
    "password": "Hello123"
}

# 用session发POST请求,json参数会自动完成:字典转JSON字符串+设置正确的Content-Type请求头
response = session.post(url, json=payload)

# 查看登录响应结果
print("登录响应内容:")
print(response.text)
print("\n登录响应头:")
print(response.headers)

# ------------------- 后续认证请求示例 -------------------
# 比如你要访问需要登录权限的接口,直接用session发请求即可,Cookie会自动带上
# protected_url = "http://172.125.169.21/api/some-protected-endpoint"
# protected_response = session.get(protected_url)
# print(protected_response.text)

为什么这样改能解决问题?

  • session.post(url, json=payload):这个json参数是requests的贴心功能,它会自动把你的Python字典序列化成JSON字符串,同时在请求头里加上Content-Type: application/json,和Postman的行为完全一致,服务器就能正确解析你的请求了。
  • Session对象:它会在登录成功后自动保存服务器返回的认证Cookie(比如sessionid或认证令牌),之后你用这个session发的任何GET/POST请求,都会自动把这些Cookie带上,不用你手动处理Cookie的存储和携带。

验证效果

运行修改后的脚本,应该能得到和Postman完全一致的成功响应:

{ "ErrorCode": 0, "Data": { "role": "admin", "_id": "7c9e7mdf4d249212282480zb", "name": "test5" } }

之后你需要访问需要认证的接口时,直接用这个session对象发请求就好,不用再操心Cookie的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:12