调用Mediawiki API发送POST请求无法获取正确JSON格式响应
问题根因
- MediaWiki 原生API默认不支持
application/json格式的请求体传参,仅能识别 GET 请求的URL查询参数、POST请求的application/x-www-form-urlencoded格式表单参数。你提交的JSON格式参数无法被API解析,服务端判定未收到有效请求参数,因此直接返回了默认的HTML格式API帮助文档。 - purge接口属于会触发站点数据变更的操作,MediaWiki默认限制该接口仅允许POST请求调用,因此使用GET请求传参时,服务端能识别到参数但会直接返回需使用POST请求的错误提示,属于接口的正常安全限制。
解决方案
优先使用原生API支持的表单格式提交POST请求,无需修改服务端配置,兼容性最高,代码示例如下:
var xhr = new XMLHttpRequest(); var url = "/wiki4/api.php"; // 构造URL编码的表单参数 var params = new URLSearchParams(); params.append('action', 'purge'); params.append('titles', title); params.append('format', 'json'); xhr.open('POST', url, true); // 设置正确的请求头类型 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); xhr.send(params);
如果你的站点已安装支持JSON请求体解析的MediaWiki扩展,也可以保留JSON提交逻辑,无需调整代码。
补充说明:若调整参数格式后返回权限错误,需额外请求
action=query&meta=tokens&type=csrf接口获取CSRF令牌,将token参数加入请求参数中即可正常调用。
内容的提问来源于stack exchange,提问作者Nobody-Knows-I-am-a-Dog
相关产品推荐
相关产品推荐

