使用WordPress的wp_remote_post时返回“Bad Request”求助
问题排查与解决方案
核心错误原因
你遇到的"Bad Request"错误主要来自两个问题:
- 请求体格式不匹配:虽然设置了
Content-Type: application/json,但传递给wp_remote_post的body是PHP数组,WordPress会默认将其编码为application/x-www-form-urlencoded格式,和API要求的JSON格式完全不符。 - 未使用用户提交数据:代码里硬编码了
phone值,没有用到表单提交的telNum参数。
修正后的代码
if(isset($_POST["adslSubmit"])) { // 获取用户提交的电话号码 $telNum = $_POST["telNum"]; // 构造符合API要求的请求体数组 $body = [ 'phone' => $telNum ]; $ApiUrl = "https://apis.mabnatelecom.com/api/inquiry"; $bodyRequest = [ "headers" => [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer 63428f4b7cb735b9d0d59f0bd539656f' ], // 将PHP数组转为JSON字符串,匹配API格式要求 "body" => json_encode($body), // 显式声明请求方法,避免潜在配置问题 "method" => "POST" ]; $api_response = wp_remote_post($ApiUrl, $bodyRequest); // 增加错误排查逻辑 if (is_wp_error($api_response)) { echo '请求失败: ' . $api_response->get_error_message(); } else { $response_code = wp_remote_retrieve_response_code($api_response); $response_body = wp_remote_retrieve_body($api_response); echo '响应状态码: ' . $response_code . '<br>'; echo '响应内容: ' . $response_body; } }
关键修正说明
- JSON格式转换:用
json_encode()把PHP数组转为JSON字符串,确保请求体格式完全符合API要求。 - 复用用户输入:替换硬编码的号码为表单提交的
telNum值,实现业务逻辑闭环。 - 强化错误处理:通过
is_wp_error()判断请求是否失败,同时获取响应状态码和内容,方便快速定位后续问题。 - 显式声明请求方法:虽然
wp_remote_post默认用POST,但显式声明能避免特殊环境下的配置冲突。
额外优化建议
- 对用户提交的
telNum做格式校验(比如检查号码长度、前缀合法性),避免向API发送无效数据。 - 定期确认Bearer Token的有效性,过期或错误的Token也会触发Bad Request或Unauthorized类错误。
内容的提问来源于stack exchange,提问作者marjan
相关产品推荐
相关产品推荐

