You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WordPress的wp_remote_post时返回“Bad Request”求助

问题排查与解决方案

核心错误原因

你遇到的"Bad Request"错误主要来自两个问题:

  1. 请求体格式不匹配:虽然设置了Content-Type: application/json,但传递给wp_remote_post的body是PHP数组,WordPress会默认将其编码为application/x-www-form-urlencoded格式,和API要求的JSON格式完全不符。
  2. 未使用用户提交数据:代码里硬编码了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:05:31