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

如何让WordPress的wp_remote_get忽略已设置的代理执行?

解决特定wp_remote_get请求绕过全局CURL代理的问题

针对你通过http_api_curl钩子全局设置代理,但需要让特定wp_remote_get请求跳过代理的场景,有三种可行方案:

方案一:临时移除全局代理钩子

执行目标请求前先移除代理钩子,请求完成后重新添加,确保后续请求不受影响:

// 移除全局代理钩子(注意优先级要和添加时一致,这里是10)
remove_action('http_api_curl', array(__CLASS__, 'addProxy'), 10);

// 执行不需要代理的请求
$response = wp_remote_get(
    $url,
    array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $api_key,
        ),
        'timeout' => self::CURL_TIMEOUT,
    )
);

// 重新添加代理钩子,恢复全局代理设置
add_action('http_api_curl', array(__CLASS__, 'addProxy'), 10, 3);

return $response;

方案二:在代理函数中添加跳过逻辑

给目标请求添加自定义标记,让代理函数识别并跳过代理设置:
首先修改wp_remote_get的调用,加入自定义参数:

return wp_remote_get(
    $url,
    array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $api_key,
        ),
        'timeout' => self::CURL_TIMEOUT,
        'skip_proxy' => true, // 自定义跳过标记
    )
);

然后修改你的addProxy函数,检查标记并跳过代理设置:

public static function addProxy($handle, $request_args, $url) {
    // 检查是否存在跳过代理的标记
    if (!empty($request_args['skip_proxy'])) {
        return; // 直接返回,不执行代理设置逻辑
    }

    // 原有代理相关设置代码
    curl_setopt($handle, CURLOPT_USERAGENT, $agent);
    // 其他代理配置(如CURLOPT_PROXY等)...
}

方案三:直接在请求参数中覆盖CURL代理选项

通过wp_remote_get的curl参数,直接清空代理相关的CURL选项,无需修改全局钩子:

return wp_remote_get(
    $url,
    array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $api_key,
        ),
        'timeout' => self::CURL_TIMEOUT,
        'curl' => array(
            CURLOPT_PROXY => '',
            CURLOPT_PROXYTYPE => '',
            CURLOPT_PROXYUSERPWD => '', // 如果有代理认证,也一并清空
        ),
    )
);

方案选型建议

  • 方案一适合临时单个请求,实现简单,但在并发场景下可能影响其他请求;
  • 方案二更灵活,适合多个请求需要跳过代理的场景,代码扩展性更好;
  • 方案三无需修改全局代理逻辑,适合快速处理单个请求的情况。

内容的提问来源于stack exchange,提问作者Edu Rafael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:10:21