PHP 接入
使用已分配的静态端点发送请求。示例从进程环境读取连接信息,默认通过 HTTP 代理服务器访问 HTTPS 目标,不包含提取 IP 或轮换逻辑。
接入准备
在运行程序的终端、容器或部署平台中设置 PROXY_HOST、PROXY_PORT、PROXY_USERNAME、PROXY_PASSWORD。值来自后台当前连接信息;端口必须与协议对应。不要将实际密码提交到代码仓库、输出到日志或放入前端代码。
运行条件与依赖
使用 PHP 8+ 并启用 cURL 扩展,将代码保存为 proxy_example.php。
sh
php proxy_example.php配置步骤
php
<?php
function requiredEnv(string $name): string {
$value = getenv($name);
if ($value === false || $value === '') {
throw new RuntimeException('Missing environment variable: ' . $name);
}
return $value;
}
$host = trim(requiredEnv('PROXY_HOST'), '[]');
$host = str_contains($host, ':') ? '[' . $host . ']' : $host;
$port = filter_var(requiredEnv('PROXY_PORT'), FILTER_VALIDATE_INT,
['options' => ['min_range' => 1, 'max_range' => 65535]]);
if ($port === false) throw new RuntimeException('Invalid PROXY_PORT');
$scheme = getenv('PROXY_SCHEME') ?: 'http';
if (!in_array($scheme, ['http', 'socks5h'], true)) {
throw new RuntimeException('PROXY_SCHEME must be http or socks5h');
}
$handle = curl_init('https://ip123.in/ip.json');
curl_setopt_array($handle, [
CURLOPT_PROXY => $host,
CURLOPT_PROXYPORT => $port,
CURLOPT_PROXYTYPE => $scheme === 'socks5h' ? CURLPROXY_SOCKS5_HOSTNAME : CURLPROXY_HTTP,
CURLOPT_PROXYUSERNAME => requiredEnv('PROXY_USERNAME'),
CURLOPT_PROXYPASSWORD => requiredEnv('PROXY_PASSWORD'),
CURLOPT_NOPROXY => '',
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$errorCode = curl_errno($handle);
curl_close($handle);
if ($body === false || $status < 200 || $status >= 300) {
fwrite(STDERR, 'Request failed; cURL code: ' . $errorCode . '; HTTP status: ' . $status . PHP_EOL);
exit(1);
}
echo $body, PHP_EOL;默认 PROXY_SCHEME=http。如需 SOCKS5,改为 socks5h 并使用 SOCKS5 对应端口,让目标域名在远端解析。切换协议不改变已分配的静态出口。
遇到问题
如果示例成功、业务代码失败,检查真正发起请求的进程、SDK 代理 IP 配置、超时和重试策略。不要通过关闭 TLS 证书校验解决连接错误。示例只输出查询结果或不含凭据的错误;排查日志也应脱敏。详见常见问题。