Перейти к содержимому

Подключение из 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, тайм-ауты и повторы. Не отключайте проверку TLS-сертификатов. Пример не выводит ошибки с данными доступа; диагностические журналы тоже нужно очищать. См. FAQ.