使用Python Requests调用Discord注册接口遇500内部服务器错误求助
Discord注册API 500错误排查与captcha_key处理修正
核心错误原因与修正方案
1. 重复JSON序列化导致请求格式错误
你手动用json.dumps(Payload)生成字符串后,又传给requests.post的json参数——但json参数本身会自动将Python字典序列化为JSON字符串,重复处理会让服务器收到嵌套的JSON格式(例如"{"captcha_key":"xxx",...}"),直接引发解析失败,返回500错误。
修正代码:
# 移除 y = json.dumps(Payload) 这一行 # 直接传递Python字典给json参数 r = requests.post(url, json=Payload, headers=headers, proxies=proxy)
2. Payload参数类型不匹配
你的Payload中gift_code_sku_id和invite的值是字符串'null',但Discord API要求的是JSON原生null(对应Python的None);同时consent、promotional_email_opt_in用字符串'true'/'false'也不符合API的布尔值要求,这些无效参数会触发服务器内部错误。
修正后的Payload:
Payload = { 'captcha_key': data, 'consent': True, 'date_of_birth': '1995-03-01', 'email': 'random@gmail.com', 'gift_code_sku_id': None, 'invite': None, 'password': 'PASSWORD', 'promotional_email_opt_in': False, 'username': 'username' }
3. 无效代理配置
你的proxy字典中https值为空字符串,会导致requests尝试使用无效代理,引发请求异常,间接导致服务器返回500。
- 若无需代理:直接删除
proxies=proxy参数 - 若需代理:填写有效代理地址,例如
'https://123.45.67.89:8080'
captcha_key处理确认与优化
有效性验证
先确认captchastart()返回的data是有效的gRecaptchaResponse令牌:
- 打印
data,检查是否为非空的长字符串(通常几百字符) - 如果返回
None或空值,说明验证码求解逻辑有问题,需先排查solve_captcha_async函数的正确性
触发时机优化
Discord注册API并非每次都要求验证码,建议先发送不带captcha_key的请求,仅当服务器明确返回需要验证码时,再调用求解函数:
# 先构造不带captcha_key的请求体 Payload_no_captcha = { 'consent': True, 'date_of_birth': '1995-03-01', 'email': 'random@gmail.com', 'gift_code_sku_id': None, 'invite': None, 'password': 'PASSWORD', 'promotional_email_opt_in': False, 'username': 'username' } initial_r = requests.post(url, json=Payload_no_captcha, headers=headers) response_data = initial_r.json() # 检查是否需要验证码 if 'captcha_key' in response_data.get('errors', {}): data = captchastart() Payload_no_captcha['captcha_key'] = data r = requests.post(url, json=Payload_no_captcha, headers=headers) print(r.text) else: print(initial_r.text)
内容的提问来源于stack exchange,提问作者RexGuard
相关产品推荐
相关产品推荐

