使用MediaWiki API登录失败,请求排查问题及调试方法
问题原因及解决方法
你的代码核心问题是没有复用同一个会话对象进行登录请求:获取登录token时用了session.get(),但发送登录POST请求时直接用了requests.post(),这会导致两次请求属于不同的会话,MediaWiki无法识别会话关联,从而返回会话超时的错误。
修复后的代码
import requests def login(base_url: str): session = requests.Session() url = base_url + "/api.php" # 获取登录token print("Get login token...") response = session.get(url=url, params={ 'action':"query", 'meta':"tokens", 'type':"login", 'format':"json" }) data = response.json() login_token = data['query']['tokens']['logintoken'] print(f"login_token={login_token}") # 复用同一个session发送登录请求 print("Login...") response = session.post(url, data={ 'action': 'login', 'lgname': 'admin', 'lgpassword': 'admin_password', 'lgtoken': login_token, 'format': 'json', }) login_data = response.json() print(login_data)
额外调试建议
- 检查是否开启了MediaWiki的
$wgEnableAPI配置,确保API功能正常启用 - 登录后可以通过调用
query+userinfo接口验证登录状态:# 登录成功后添加这段代码 response = session.get(url, params={ 'action': 'query', 'meta': 'userinfo', 'format': 'json' }) print(response.json()) - 如果是本地MediaWiki,确认
base_url格式正确(比如http://localhost/wiki),避免路径错误
内容的提问来源于stack exchange,提问作者doberkofler
相关产品推荐
相关产品推荐

