使用Python调用WordPress REST API遇到的认证问题
解决WordPress REST API发布文章的401认证问题(Kinsta托管环境)
看起来你遇到的核心问题是认证失败导致401错误,而调用根域名返回200只是说明服务器能正常访问,但根本没触发文章发布的API端点,所以自然不会有文章生成。结合Kinsta的托管环境,我给你梳理几个排查和解决的步骤:
1. 先确认Application Passwords的配置是否正确
- 首先要确保你是在WordPress后台的管理员用户编辑页面创建的Application Passwords,生成的密码是一串随机的16位字符(不是你平时登录后台的密码),而且创建后要立刻保存好——刷新页面后就看不到完整密码了。
- Kinsta默认支持Application Passwords,但如果你的网站安装了安全类插件(比如Wordfence),可能会限制API的认证请求,建议先临时禁用这类插件测试。
2. 检查Python请求的认证逻辑是否正确
WordPress的Application Passwords采用Basic Auth认证,你需要在请求中正确传递用户名和应用密码。这里给你一个标准的请求示例:
import requests import os # 推荐用环境变量存储敏感信息,不要硬编码 WP_USERNAME = "你的WordPress管理员用户名" WP_APP_PASSWORD = os.getenv("WP_APP_PASSWORD") # 或者直接填生成的应用密码(测试用) API_URL = "https://my-website.com/wp-json/wp/v2/posts" # 要发布的文章内容 post_payload = { "title": "API发布测试文章", "content": "这是通过Python调用WordPress API发布的内容", "status": "publish" # 设为publish直接发布,默认是draft草稿 } # 发送POST请求,必须带auth参数 response = requests.post( API_URL, json=post_payload, auth=(WP_USERNAME, WP_APP_PASSWORD) ) # 打印调试信息,查看具体错误 print(f"状态码: {response.status_code}") print(f"响应内容: {response.json()}")
注意几个关键点:
- 必须用
POST请求,GET请求只能获取文章列表,不能发布 - 要传递
json格式的payload,确保请求头里的Content-Type是application/json(requests的json参数会自动设置) status字段如果不设为publish,文章会以草稿形式存在,你需要到后台草稿箱查看
3. 排查Kinsta托管环境的特殊限制
Kinsta的WAF(Web应用防火墙)或者Cloudflare集成可能会拦截未正确认证的API请求:
- 登录Kinsta后台,进入你的网站的Security选项卡,临时关闭WAF测试一下,如果能成功发布,再调整WAF规则允许
/wp-json/wp/v2/posts端点的POST请求 - 确认你的网站SSL配置正常,必须用
https请求,http请求会被Kinsta强制跳转,可能导致认证信息丢失
4. 用调试工具定位问题
如果还是报错,用curl或者Postman先测试API,排除Python代码的问题:
curl -X POST https://my-website.com/wp-json/wp/v2/posts \ -u "你的用户名:生成的应用密码" \ -H "Content-Type: application/json" \ -d '{"title":"CURL测试文章","content":"用CURL测试API发布","status":"publish"}'
如果curl请求成功,说明是Python代码的问题(比如拼写错误、参数传递错误);如果curl也返回401,那就是认证信息或者服务器配置的问题,此时查看返回的错误信息(比如"code": "invalid_username"或者"incorrect_password"),就能精准定位是用户名错了还是密码错了。
内容的提问来源于stack exchange,提问作者Richard BEN
相关产品推荐
相关产品推荐

