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

MediaWiki API返回HTTP响应对象而非JSON,请求排查原因

问题分析与解决

首先明确:你看到的<Response [200]>是Python requests库返回的Response对象的默认打印结果,不是API返回的JSON内容。要获取实际的响应数据,必须调用Response对象的.json()方法。

核心问题:没正确解析响应

如果你的代码只是直接打印了response变量,就会得到这个输出。修正方式很简单:

# 错误写法:直接打印Response对象
response = requests.post(api_url, data=payload)
print(response)  # 输出 <Response [200]>

# 正确写法:解析为JSON
login_result = response.json()
print(login_result)

MediaWiki 1.17.0的适配问题

你的示例代码大概率是针对新版MediaWiki写的,1.17.0是2011年的老版本,API登录流程和参数有差异,属于代码过时:

  • 1.17.0不支持一步登录,必须分两步:先获取登录token,再用token提交登录请求
  • 必须显式指定format=json参数,否则API默认返回XML
  • 登录参数用lgname、lgpassword、lgtoken,而非新版的username、password、csrf_token
  • 必须用Session保持会话cookie,否则登录状态无法维持

适配1.17.0的完整示例代码

import requests

# 初始化会话,自动维持cookie
session = requests.Session()
api_base = "http://你的维基域名/w/api.php"

# 第一步:获取登录token
token_params = {
    "action": "query",
    "meta": "tokens",
    "type": "login",
    "format": "json"
}
token_res = session.get(api_base, params=token_params)
token_data = token_res.json()
login_token = token_data["query"]["tokens"]["logintoken"]

# 第二步:提交登录请求
login_params = {
    "action": "login",
    "lgname": "你的用户名",
    "lgpassword": "你的密码",
    "lgtoken": login_token,
    "format": "json"
}
login_res = session.post(api_base, data=login_params)
login_result = login_res.json()

# 打印登录结果
print(login_result)

额外检查点

  • 确认API地址正确:必须指向维基根目录下的w/api.php
  • 检查用户名密码是否正确,1.17.0对部分特殊字符密码的支持有限,必要时需转义
  • 如果返回XML而非JSON,肯定是漏加了format=json参数

内容的提问来源于stack exchange,提问作者lolololol ol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:15:35