使用curl_cffi向Midjourney发送POST请求时遭遇400 Bad Request错误
解决Midjourney Discord登录接口400 Bad Request错误
以下是针对问题的具体排查和修复方案:
核心问题分析与修复步骤
移除手动计算的
Content-Length请求头
curl_cffi会自动处理请求体的长度计算,手动编码计算容易因字符编码差异导致长度不匹配,直接触发400错误,无需手动添加该头。修正请求数据参数
NextAuth的登录接口不需要json=True参数,仅保留csrfToken和callbackUrl即可;curl_cffi的data参数接受字典时会自动按application/x-www-form-urlencoded格式编码,无需手动调用urllib.parse.urlencode。确保Session复用与请求头精简
复用获取CSRF Token的同一个Session,保证Cloudflare验证相关Cookie被正确携带;仅保留必要的Content-Type头,避免多余头干扰请求。更新浏览器模拟版本
旧版本Chrome(如chrome110)可能无法通过Midjourney的反爬检测,改用更新的版本(如chrome124)提升兼容性。
修改后的代码
from curl_cffi import requests import json # 初始化会话,全程复用 s = requests.Session() # 获取CSRF Token r = s.get('https://www.midjourney.com/api/auth/csrf', impersonate="chrome124") print("CSRF请求状态码:", r.status_code) csrf = json.loads(r.text)['csrfToken'] # 构造符合要求的请求数据 data = { "callbackUrl": "https://www.midjourney.com/app/", "csrfToken": csrf } # 仅保留必要的请求头 headers = { 'Content-Type': 'application/x-www-form-urlencoded' } # 发送登录请求 r = s.post( 'https://www.midjourney.com/api/auth/signin/discord', headers=headers, allow_redirects=True, data=data, impersonate="chrome124" ) print("登录请求状态码:", r.status_code) print("跳转后URL:", r.url) print("响应内容:", r.text)
额外排查点
- 确认Cloudflare验证状态:先通过Session访问Midjourney首页,确保已通过Cloudflare人机验证,再发送登录请求。
- 对比浏览器请求参数:打开浏览器开发者工具,复制实际登录请求的Form Data,确保代码参数与浏览器完全一致(比如是否存在
redirect等隐藏参数)。
内容的提问来源于stack exchange,提问作者Gustje04
相关产品推荐
相关产品推荐

