|
发表于 2025-8-12 13:24:41
|
显示全部楼层
根据您提供的信息,CSRF校验失败通常是由于以下原因造成的:
### 主要问题分析:
1. CSRF Token不匹配:表单中的 csrf 参数必须与Cookies中的 bili_jct 值完全一致
2. 请求头缺失Cookies:未在请求中携带登录后的Cookies(尤其是 bili_jct)
3. 表单数据结构错误:多个 msg 参数被覆盖,应采用元组列表格式
### 解决方案:
1. 确保从登录Cookies中获取正确的CSRF Token:
- import requests
- # 登录后获取的Cookies(示例)
- cookies = {
- "SESSDATA": "你的SESSDATA",
- "bili_jct": "f140a7396431c7341069640e570a8975" # 必须与csrf参数一致
- }
复制代码
2. 修改表单数据结构(使用元组列表避免覆盖):
- data = [
- ('msg', '473690062'),
- ('msg', '1'),
- ('msg', '3546950181849575'),
- ('msg', '1'),
- ('msg', '0'),
- ('msg', '{"content":"Python TEST"}'), # JSON需保持字符串格式
- ('msg', '0'),
- ('msg', ''),
- ('msg', '93513FA9-8E7C-40C3-8BCE-5DCD9E3CB634'),
- ('msg', '1754884846'),
- ('from_firework', '0'),
- ('build', '0'),
- ('mobi_app', 'web'),
- ('csrf', 'f140a7396431c7341069640e570a8975') # 确保与cookies中的bili_jct相同
- ]
复制代码
3. 发送请求时携带Cookies和Headers:
- headers = {
- "User-Agent": "Mozilla/5.0",
- "Referer": "[url=https://www.bilibili.com"]https://www.bilibili.com"[/url]
- }
- response = requests.post(
- url,
- data=data,
- cookies=cookies, # 关键!必须携带cookies
- headers=headers
- )
复制代码
### 重点检查项:
1. 确保Cookies中的 bili_jct 值 = 表单中的 csrf 值
2. 使用 requests.Session() 保持会话(推荐)
3. 动态参数 w_rid 和 wts 可能需要实时生成
> 如果仍然失败,建议检查账号登录状态是否有效,并确保请求头包含完整的 User-Agent 和 Referer。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|