使用Python Requests调用WordPress REST API时出现404错误求助
WordPress REST API 请求404问题(Python Requests vs curl/浏览器)
以下是几种常见的排查和解决思路:
1. 缺失请求头触发拦截/重定向
大部分WordPress站点会校验请求的User-Agent,curl和浏览器会自动带上符合浏览器规范的请求头,但Python Requests默认的User-Agent标识为python-requests/x.x.x,容易被服务器拦截或触发错误重定向(跳转到首页导致404)。
解决方法:手动添加浏览器风格的请求头
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } r = requests.get('https://myWebsiteDomain.com/blog/wp-json/wp/v2/categories', headers=headers) print(r.status_code)
2. URL路径或服务器重写规则问题
部分站点的permalink设置、Nginx/Apache重写规则可能导致Requests请求无法正确解析API路径。
解决方法:
- 确保URL和浏览器中使用的完全一致(注意大小写,部分服务器区分路径大小写)
- 尝试在URL末尾添加斜杠:
https://myWebsiteDomain.com/blog/wp-json/wp/v2/categories/ - 检查站点permalink设置是否为「文章名称」或其他非默认格式(纯静态格式可能影响REST API路径识别)
3. CDN或缓存插件拦截
如果站点使用了CDN(如Cloudflare)或缓存插件,可能对不同来源的请求返回不同结果——curl和浏览器可能命中缓存,而Requests的请求被CDN拦截或缓存未命中。
解决方法:
- 添加
Cache-Control头强制跳过缓存:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Cache-Control': 'no-cache' } - 检查CDN规则,确认是否对
python-requests这类User-Agent做了拦截或重定向
4. 会话Cookie验证问题
虽然多数REST API端点是公开的,但部分站点可能要求登录权限,或依赖特定会话Cookie。浏览器和curl可能保存了登录后的Cookie,而Requests是全新会话,无相关Cookie导致404。
解决方法:
- 先在浏览器退出登录后访问API URL,确认该端点是否真的公开可访问
- 如果需要登录,使用Requests会话保持或手动添加登录Cookie:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Cookie': 'your_login_cookie_key=your_login_cookie_value' }
内容的提问来源于stack exchange,提问作者Hosam Hashem
相关产品推荐
相关产品推荐

