通过Curl及Python脚本登录MediaWiki遇授权失败与SSL错误
MediaWiki 登录问题排查与解决
Curl 登录未授权问题
核心原因
常规Curl请求未正确处理MediaWiki登录必需的CSRF令牌和完整会话Cookie,而浏览器复制的请求自动包含了这些关键验证信息,因此仅能短暂生效。
修复步骤
- 获取登录页面的CSRF令牌与初始Cookie
先请求登录页面,保存Cookie并提取wpLoginToken:curl -c cookies.txt https://你的Wiki域名/index.php?title=Special:UserLogin > login_page.html # 从页面源码提取令牌(根据实际页面结构调整命令) LOGIN_TOKEN=$(grep -o 'name="wpLoginToken" value="[^"]*"' login_page.html | cut -d '"' -f 4) - 携带令牌与Cookie发起登录请求
使用提取到的令牌,结合Cookie发送POST请求完成登录,同时更新会话Cookie:curl -b cookies.txt -c cookies.txt -X POST https://你的Wiki域名/index.php?title=Special:UserLogin \ -d "wpName=你的用户名" \ -d "wpPassword=你的密码" \ -d "wpLoginToken=$LOGIN_TOKEN" \ -d "wpRemember=1" \ -d "wpLoginAttempt=登录" - 验证登录状态
请求需要权限的页面时,带上保存的Cookie:
额外说明:若Wiki开启了会话IP绑定等安全机制,手动Curl的会话可能快速失效,这种情况需检查Wiki的远程登录权限设置。curl -b cookies.txt https://你的Wiki域名/index.php?title=需权限访问的页面
Python 官方脚本SSL证书验证失败
核心原因
脚本默认启用严格的SSL证书验证,若Wiki使用自签名证书、证书链不完整,或系统CA证书库缺失对应根证书,就会触发验证失败。
修复方案
- 临时跳过验证(仅测试环境)
在脚本的requests请求中添加verify=False参数:
注意:生产环境禁用此方法,存在安全风险。import requests session = requests.Session() # 获取登录页面时跳过验证 login_page = session.get("https://你的Wiki域名/index.php?title=Special:UserLogin", verify=False) # 登录请求同样添加verify=False login_response = session.post( "https://你的Wiki域名/index.php?title=Special:UserLogin", data={ "wpName": "你的用户名", "wpPassword": "你的密码", "wpLoginToken": 从登录页面提取的令牌, "wpLoginAttempt": "登录" }, verify=False ) - 指定自定义证书(生产环境推荐)
下载Wiki的SSL证书文件(如wiki-cert.pem),在请求中指定证书路径:login_page = session.get("https://你的Wiki域名/index.php?title=Special:UserLogin", verify="/path/to/wiki-cert.pem") - 更新系统CA证书库
若为系统CA证书缺失导致,更新系统证书包:- Ubuntu/Debian:
sudo apt update && sudo apt install --reinstall ca-certificates - CentOS/RHEL:
sudo yum update ca-certificates
- Ubuntu/Debian:
内容的提问来源于stack exchange,提问作者NalagioDroli
相关产品推荐
相关产品推荐

