Python调用WordPress REST API返回403错误排查求助
WordPress REST API调用返回403错误解决方案
问题描述
编写Python脚本通过REST API对接WordPress站点时,使用可正常登录后台的账号密码发起请求,始终返回403错误,原报错代码如下:
url = "https://prod-wp.xxxxxx.com/wp-json/wp/v2/posts" user = "xxxxxx" password = "xxxxxxxx" credentials = user + ':' + password token = base64.b64encode(credentials.encode()) header = {'Authorization': 'Basic ' + token.decode('utf-8')} response = requests.get(url , headers=header) print(response)
返回结果:<Response [403]>
问题原因
- 原代码使用的HTTP Basic Auth认证方式未被WordPress默认支持,服务端默认无对应校验逻辑,无法识别该类认证请求
- 站点的安全插件、Web服务器(Nginx/Apache)配置常默认拦截Basic Auth的Authorization请求头,导致认证信息无法传递到WordPress内核完成校验
可行解决方案
通过JWT认证方式发起请求,前提是WordPress服务端已安装启用JWT认证插件完成基础配置,可行代码如下:
import requests import os from dotenv import load_dotenv load_dotenv() BASE_URL = 'https://website.com/wp-json' WP_URL = os.getenv("WP_URL") WP_USERNAME = os.getenv("WP_USERNAME") WP_PASSWORD = os.getenv("WP_PASSWORD") def get_headers(): wp_credentials = {'username': WP_USERNAME, 'password': WP_PASSWORD} jwt_response = requests.post(f'{BASE_URL}/jwt-auth/v1/token', json=wp_credentials) jwt_token = jwt_response.json()['token'] headers = { "Authorization": "Bearer %s" % jwt_token, "Content-Type": "application/json", "Accept": "application/json", } print(f'Headers are equal to: {headers}') return headers get_headers()
该方案先调用JWT令牌接口获取有效身份令牌,后续业务请求携带Bearer令牌即可正常通过服务端权限校验。
内容的提问来源于stack exchange,提问作者user3324136
相关产品推荐
相关产品推荐

