WordPress为特定域名的 HTTP 请求自动设置代理

VFX大学 wordpress开发 WordPress为特定域名的 HTTP 请求自动设置代理

正在查看 1 条回复
  • 作者
    帖子
    • #448

      追光
      管理员

      以下是对 WordPress 中为特定 HTTP 请求自动设置代理 功能的详细整理,包括用途、使用场景、扩展性说明以及完整代码注释说明。


      📌 功能介绍:为特定域名的 HTTP 请求自动设置代理(WordPress)

      ✨ 用途:

      在某些场景下,WordPress 插件或主题可能会请求外部 API(如 OpenAI),但由于网络限制或 DNS 阻断,部分 API 无法直接访问。此功能的作用就是:

      • 自动检测目标域名

      • 仅为特定域名请求设置代理(SOCKS5 或 HTTP)

      • 保证其他请求不受影响

      • ✅ 支持 灵活扩展多个域名 + 多种代理类型配置


      🧪 使用场景举例:

      场景

      描述

      🇨🇳 国内服务器

      访问 api.openai.com 被屏蔽,需要通过 SOCKS5/HTTP 代理中转

      🧠 AI 插件

      使用 ChatGPT、DALL·E 等服务,需走代理访问 OpenAI

      🛜 API 网关限制

      某些外部 API 限制直连访问,只允许通过代理跳板访问

      🔐 内网绕行

      企业内网中通过代理服务器转发请求到外部服务


      ✅ 推荐写法(可扩展的代理规则)

      
      add_action('http_api_curl', function($handle, $r, $url) {
          // 可配置的代理规则表(可扩展多个)
          $proxy_rules = [
              'api.openai.com' => [
                  'proxy' => '43.143.133.170:端口号',
                  'type'  => CURLPROXY_SOCKS5_HOSTNAME, // 支持解析域名的 SOCKS5
              ],
              // 举例:扩展第二个代理规则
              // 'api.another.com' => [
              //     'proxy' => '127.0.0.1:1080',
              //     'type'  => CURLPROXY_SOCKS5,
              // ],
          ];
      
          foreach ($proxy_rules as $domain => $settings) {
              if (strpos($url, $domain) !== false) {
                  curl_setopt($handle, CURLOPT_PROXY, $settings['proxy']);
                  curl_setopt($handle, CURLOPT_PROXYTYPE, $settings['type']);
                  break;
              }
          }
      }, 10, 3);
      

      🧾 配置说明:

      $proxy_rules 中设置每一个需要代理的目标域名及其配置。

      
      'api.openai.com' => [
          'proxy' => '43.143.133.170:端口号',         // 代理 IP 与端口
          'type'  => CURLPROXY_SOCKS5_HOSTNAME,      // 支持域名的 SOCKS5(推荐)
      ],
      

      支持的代理类型(CURLOPT_PROXYTYPE 对应的 PHP 常量):

      类型

      说明

      常量名

      HTTP 代理

      常规 HTTP 代理

      CURLPROXY_HTTP

      SOCKS4

      旧版 SOCKS 协议

      CURLPROXY_SOCKS4

      SOCKS5(IP)

      不支持域名解析的 SOCKS5

      CURLPROXY_SOCKS5

      SOCKS5h(推荐)

      支持域名解析的 SOCKS5

      CURLPROXY_SOCKS5_HOSTNAME


      ✅ 简洁版本(仅用于 OpenAI)

      如果你只需要为 api.openai.com 设置代理,可以使用以下简化版本:

      
      add_action('http_api_curl', function($handle, $r, $url) {
          if (strpos($url, 'api.openai.com') !== false) {
              curl_setopt($handle, CURLOPT_PROXY, '43.143.133.170:55970');
              curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
          }
      }, 10, 3);
      

      💡 说明总结:

      • 📌 这个钩子 http_api_curl 只影响通过 wp_remote_get() / wp_remote_post() / wp_remote_request() 发出的请求;

      • 💬 适合用于插件、主题中需要访问外部接口(如 AI、地图、天气、支付等)的网络请求;

      • 🔒 不会影响浏览器端访问,仅限 WordPress 服务器发出的 HTTP 请求

    • #451

      追光
      管理员

      设置代理的前提条件,必须特别说明清楚,不然容易误导开发者或部署者。下面是补充后的完整说明重点段落:


      ❗ 重要前提说明:你必须自己拥有一个可用的代理服务

      使用 WordPress 的 http_api_curl 钩子设置代理,前提是你已经部署好可用的 HTTP 或 SOCKS5 代理服务,并确保:

      • ✅ 该代理 在服务器可以访问

      • ✅ 支持你需要的协议类型(HTTP、SOCKS5 等);

      • ✅ IP 和端口配置 正确可连通

      • ✅ 该代理能访问你希望通过它访问的目标域名(如 api.openai.com);

      • ✅ 如果是 SOCKS5,推荐使用支持域名解析的 SOCKS5h 类型。


      🏗️ 代理部署常见方式:

      类型

      示例服务/工具

      备注

      HTTP 代理

      Squid, Nginx, Tinyproxy

      简单易配,但不支持 UDP 或 WebSocket

      SOCKS5 代理

      danted, ShadowSocks, Trojan

      推荐,稳定支持多种协议

      VPN代理跳板

      WireGuard / OpenVPN + 本地转发

      需配合 socksify 工具


      🧪 代理是否部署成功的验证方法:

      你可以在部署服务器(WordPress 所在主机)上使用如下命令来验证代理服务是否正常:

      检查代理是否通:

      
      curl -x socks5h://127.0.0.1:1080 https://api.openai.com/v1/models \
      -H "Authorization: Bearer 你的密钥"
      -H "Content-Type: application/json"
      
      curl -x socks5h://127.0.0.1:1080 https://api.openai.com

      如果返回 OpenAI 的模型列表(或认证错误但非网络错误),说明代理有效。


      ✅ 总结

      • 使用代理功能前,你必须 自行搭建或拥有一个稳定可用的代理服务器

      • 不提供代理服务的代码,仅提供配置代理的方式;

      • 不具备代理环境,该功能将无效,相关 API 请求会超时或失败。

正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。