使用Python requests传递POST body参数时提示mfa-code缺失如何解决
问题排查&修正方案
拼写错误修正
你给出的示例代码里requests拼写错误成了reqeusts,如果实际代码也是这么写的会直接抛出命名错误,先修正这个低级错误。URL补全
你当前的url只写了域名redacted.net,缺少协议前缀(https://)和接口路径/login2,修正为完整的接口地址:url = "https://redacted.net/login2"补全必要的请求头和Cookie
从你给出的正常请求格式看,服务端需要校验Cookie字段里的session和verify值,你没传递这部分参数的话,服务端无法匹配到对应的验证会话,自然会判定参数缺失。另外如果服务端有校验Referer、Origin这类字段,也需要同步加上避免被拦截。确认POST参数编码格式
你要的application/x-www-form-urlencoded格式用data参数传递是完全支持的,requests会自动将字典转为key=value的表单格式,不需要手动用json.dumps,json参数是用来发JSON格式请求体的,你这个场景不用。
修正后可运行代码
import requests # 补全完整的接口地址 url = "https://redacted.net/login2" # 表单参数 data = {"mfa-code": "0000"} # 补全Cookie,值替换成你自己的实际值 cookies = { "session": "qexMWyQnLtSlBI8B005qnVW4OYvEwEV2", "verify": "wiener" } # 补全必要的请求头,避免服务端校验拦截 headers = { "Referer": "https://redacted.net/login2", "Origin": "https://redacted.net", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0" } r = requests.post(url, data=data, cookies=cookies, headers=headers) print(r.text)
调试方案
如果运行后仍报错,可通过以下代码确认实际发送的请求内容是否符合预期,requests完全支持该场景的需求,不存在实现不了的情况:
- 打印实际请求体:
print(r.request.body),确认输出为mfa-code=0000 - 打印实际请求头:
print(r.request.headers),确认Content-Type为application/x-www-form-urlencoded
内容的提问来源于stack exchange,提问作者vanko
相关产品推荐
相关产品推荐

