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

WordPress自定义插件调用REST API返回503 Service Unavailable问题求助

问题解决步骤

  • 第一步:先给现有cURL代码补充调试逻辑,明确503的来源
    你可以先将代码修改为以下版本,打印出请求的详细状态和错误信息,确认503是目标API返回还是本地服务器抛出的错误:
protected function getGetData($url,$token){    
    $curl = curl_init();
    $auth= 'Authorization: Bearer '.$token;
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
            $auth,
            // 模拟Postman的请求头,避免WAF拦截
            'User-Agent: PostmanRuntime/7.39.0',
            'Accept: */*',
            'Connection: close'
        ),
        // 禁用长连接复用,每次新建请求,解决首次成功后续失败的问题
        CURLOPT_FORBID_REUSE => true,
        CURLOPT_FRESH_CONNECT => true,
    ));
    $response = curl_exec($curl);
    // 新增调试信息
    $err = curl_error($curl);
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);
    if ($err) {
        error_log('cURL错误:'.$err);
    }
    error_log('请求返回状态码:'.$httpCode);
    return $response;
}

大部分首次请求正常后续返回503的问题都和请求头缺失被目标API的WAF拦截、长连接被标记异常有关,补充上述配置后即可解决。

  • 第二步:优先使用WordPress原生HTTP API替换自定义cURL代码
    WordPress原生的wp_remote_get方法已经适配了服务器环境的各类配置,兼容性远高于自定义cURL,对应写法如下:
protected function getGetData($url,$token){
    $response = wp_remote_get($url, array(
        'headers' => array(
            'Authorization' => 'Bearer '.$token,
            'User-Agent' => 'PostmanRuntime/7.39.0',
            'Accept' => '*/*'
        ),
        'timeout' => 10,
        'redirection' => 10,
        'httpversion' => '1.1',
        'blocking' => true,
    ));
    if (is_wp_error($response)) {
        error_log('请求错误:'.$response->get_error_message());
        return false;
    }
    $httpCode = wp_remote_retrieve_response_code($response);
    error_log('请求返回状态码:'.$httpCode);
    return wp_remote_retrieve_body($response);
}
  • 第三步:排查服务器层面拦截规则
    如果上述修改无效,检查WordPress所在服务器的Apache配置:
    • 确认mod_security、mod_evasive模块是否设置了出站请求频率限制,拦截了多次去往目标API的请求
    • 确认.htaccess文件没有添加限制出站请求的自定义规则
    • 确认服务器防火墙没有对目标API的IP做访问频率限制

内容的提问来源于stack exchange,提问作者Daniele Giannini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:39:06