为何WordPress POST请求自定义头验证失败,auth参数却生效?
WordPress REST API 认证问题:自定义Header vs Auth参数差异解析
问题根源
WordPress的Application Passwords插件仅支持HTTP Basic认证协议,不识别你自定义的user/password请求头。
当你使用requests.post的auth=(username, password)参数时,requests库会自动完成以下合规操作:
- 将
用户名:密码拼接成字符串 - 对该字符串进行Base64编码
- 生成规范的
Authorization: Basic <编码后的字符串>请求头
而你手动定义的{"user": username, "password": password}请求头,WordPress REST API完全无法解析,因此返回401 rest_cannot_edit权限错误。
正确的自定义Header写法(若需手动构造)
如果不想用auth参数,必须严格遵循Basic Auth规范构造请求头:
import requests import base64 url = "https://dca-mx.com/wp-json/wp/v2/pages/362" username = 'Fabian' password = 'XXXX XXXX XXXX XXXX XXXX' data = { 'title': 'DCA DB', 'content': 'HELLO FROM PYTHON.', 'status': 'publish' } # 构造符合规范的Basic Auth认证头 auth_str = f"{username}:{password}" b64_auth = base64.b64encode(auth_str.encode('utf-8')).decode('utf-8') headers = {"Authorization": f"Basic {b64_auth}"} response = requests.post(url, headers=headers, json=data) # 响应检查 if response.status_code == 201: print('Post created successfully') elif response.status_code == 200: print('Posteado Correctamente!') else: print(response.text)
额外建议
直接使用requests的auth参数是最优方案:
- 自动处理编码和请求头构造,避免手动编码出错
- 代码更简洁易读,维护成本更低
内容的提问来源于stack exchange,提问作者Fabián Gabriel L.S.
相关产品推荐
相关产品推荐

