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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:57:52