用户端如何在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
相关产品推荐
相关产品推荐

