WordPress调用API获取访问令牌后请求返回405错误
代码问题排查与修正
请求编码格式不匹配
wp_remote_post传入数组格式的body参数时,默认会按application/x-www-form-urlencoded格式编码为表单参数,自动设置对应Content-Type头。如果目标API仅接受JSON格式的请求体,就会因格式不匹配触发405错误。
修正方式:- 将请求体数组通过
json_encode()转为JSON字符串传入 - 显式在请求参数中声明和Postman一致的请求头
示例修正代码:
$body = array( 'accesstoken' => $accesstoken, 'eventid' => '29102901920129', 'attendeeid' => '1212121902910920', ); $args = array( 'method' => 'POST', 'headers' => array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', ), 'body' => json_encode($body), 'redirection' => 0, );- 将请求体数组通过
重定向导致请求方法降级
WordPress HTTP客户端默认会跟随重定向,且遇到301/302跳转时会将原POST请求转为GET请求。如果目标接口存在域名跳转逻辑,最终到达服务端的请求会变为GET,自然触发“方法不允许”的405错误。
修正方式:在请求参数中添加'redirection' => 0,禁止自动跟随重定向,避免POST方法被自动改写为GET。默认请求头触发拦截
WordPress HTTP客户端会默认携带User-Agent: WordPress/版本号; 站点地址的特征头,部分第三方API的WAF规则会拦截这类特征请求,返回泛化的405错误。
修正方式:在请求头中自定义和Postman完全一致的User-Agent值,对齐请求特征避免被拦截。校验请求参数位置
对照Postman中成功请求的参数传递规则,确认access token、eventid等参数是要求放在请求体还是请求头中,如果参数位置和接口要求不匹配,也可能触发校验异常后返回405响应。
内容的提问来源于stack exchange,提问作者DigM
相关产品推荐
相关产品推荐

