WordPress为特定域名的 HTTP 请求自动设置代理
› VFX大学 › wordpress开发 › WordPress为特定域名的 HTTP 请求自动设置代理
- This topic has 1 个回复, 1 个参与人, and was last updated 8 小时, 39 分 前 by
追光.
- 作者帖子
- 2025年7月11日 - 上午11:19 #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 请求。
- 2025年7月11日 - 上午11:23 #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 请求会超时或失败。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。