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

用户端如何在Request Session中实现Discord OAuth2?遇格式错误求助

问题分析与解决

你遇到的400错误核心原因是请求体格式不匹配服务器要求:服务器期望接收JSON格式的请求payload,但你当前传递的是纯文本的Bearer {token}字符串,同时请求头的Content-Type设置为text/plain,导致服务器无法解析请求体,返回malformed_json_body错误。

修正方案

1. 调整请求头与请求体格式

将Content-Type改为application/json,同时把Discord token封装成服务器期望的JSON结构(根据Rover接口的常规OAuth2对接逻辑,通常需要将token放在JSON字段中)。

2. 修改后的代码

rover_url = "https://registry.rover.link/login/discord"

rover_headers = {
    "Origin": "https://rover.link",
    "Referer": "https://rover.link/",
    "Accept": "*/*",
    "Content-Type": "application/json",  # 修正为JSON类型
    "Accept-Encoding": "gzip, deflate, br, zstd",
    "Accept-Language": "en-US,en;q=0.9",
}

# 构造JSON格式的payload,根据Rover接口要求调整字段名,常见为access_token或token
rover_payload = {"access_token": token}  # 替代原纯文本的Bearer字符串

try:
    rover_response = session.post(
        rover_url,
        headers=rover_headers,
        json=rover_payload,  # 使用json参数自动处理JSON编码
        timeout=10
    )
    if rover_response.status_code == 200:
        logger.suc(f"Rover login success: {rover_response.json()}")
    else:
        logger.err(f"Rover login failed: {rover_response.status_code} | {rover_response.text}")
except Exception as e:
    logger.err(f"Error logging into Rover: {e}")

额外说明

  • 如果Rover接口要求在请求体中传递Bearer {token}格式的字符串(而非单独的token字段),可以将payload改为:
    rover_payload = {"authorization": f"Bearer {token}"}
    
  • 使用json参数传递payload时,requests库会自动设置正确的Content-Type为application/json,也可以省略手动设置该头字段,但保留原头信息中的其他字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:45:05