使用Python调用WordPress REST API发文章返回200而非201状态码
解决思路
1. 修复Basic Auth的编码错误
你当前的Authorization header直接拼接用户名和密码,不符合HTTP Basic Auth的规范。正确做法是将username:password字符串进行Base64编码后再传入,修改代码如下:
import requests import base64 url = 'https://example.com/wp-json/wp/v2/posts' username = 'UserNameHere' password = 'MyPasswordHere' # 对用户名密码进行Base64编码 auth_str = f"{username}:{password}" auth_bytes = auth_str.encode('utf-8') auth_base64 = base64.b64encode(auth_bytes).decode('utf-8') headers = {'Authorization': f'Basic {auth_base64}'} headers['Content-Type'] = 'application/json' post_data = { 'title': 'My First Post', 'content': 'This is my first python post!', 'status': 'publish' } response = requests.post(url, headers=headers, json=post_data) if response.status_code == 201: print(response.json()) else: print('Error:', response.status_code, response.json())
2. 验证用户角色权限
确保使用的WordPress账号拥有发布文章的权限(如编辑、作者或管理员角色)。若角色权限不足,REST API会拒绝创建请求,可能返回错误或降级为GET请求返回现有文章列表。
3. 检查URL与重定向问题
- 确认API URL格式正确,避免末尾缺少斜杠导致服务器重定向(重定向可能将POST请求转为GET)。
- 确保请求URL与网站实际地址一致,比如不要用HTTP地址请求强制HTTPS的站点。
4. 排查服务器端REST API设置
- 确认WordPress的REST API功能已启用(默认开启,但部分主题或插件可能禁用)。
- 检查安全插件(如Wordfence)是否拦截了REST API的POST请求,需在插件设置中允许该API路径的写入权限。
内容的提问来源于stack exchange,提问作者mikelowry
相关产品推荐
相关产品推荐

