使用Python调用WordPress REST API发文章异常:返回现有文章而非新建
问题排查与解决方案
可能的原因及对应修复步骤
1. URL重定向导致POST转为GET
WordPress的REST API端点若请求URL末尾无斜杠,服务器可能返回301/302重定向到带斜杠的版本,此时POST请求会被自动转为GET,进而返回所有文章列表。
修复:
在URL末尾添加斜杠:
url = "https://myurl.com/wp-json/wp/v2/posts/"
2. 应用密码关联用户权限不足
确保使用的WordPress用户账号拥有publish_posts权限,且应用密码正确关联到该用户。部分服务器配置下,权限不足可能导致请求静默降级为GET(虽更常见返回403,但需排除此情况)。
验证:
登录WordPress后台,检查用户角色(如编辑、管理员)是否具备发布文章权限,同时确认应用密码是在该用户的个人设置中生成的。
3. 请求Content-Type未显式声明
尽管requests.post的json参数会自动设置Content-Type: application/json,但部分特殊服务器配置可能需要显式声明该头部。
修复:
手动在请求头中添加Content-Type:
header = { 'Authorization': 'Basic ' + token.decode('utf-8'), 'Content-Type': 'application/json' }
4. 代码拼写错误(不影响功能但建议修正)
代码中responce为拼写错误,正确应为response:
response = requests.post(url, headers=header, json=post) print(response.json())
额外调试建议
- 打印响应状态码和头部,确认是否发生重定向:
若状态码为301/302,说明确实发生重定向,可启用print(response.status_code) print(response.headers)allow_redirects=False禁止自动重定向,再针对性排查URL问题。
内容的提问来源于stack exchange,提问作者Spotfire_new
相关产品推荐
相关产品推荐

