Перейти к содержанию

Руководство · На русском

Прокси: отказ соединения или таймаут

Ошибка соединения ещё не говорит о неверном пароле или отказе сайта. Сначала установите, дошёл ли клиент до шлюза и завершил ли согласование протокола. Сохраняйте вместе код завершения и текст ошибки: одинаковое число в разных версиях может описывать разные этапы.

Каталог и инструкции — на русском. Страница отдельного товара, аккаунт, корзина, оплата и полные условия обслуживания пока доступны на английском.

Опубликовано:

Короткие ответы

Что означает connection refused?

Клиент получил отказ TCP по указанному пути, хосту и порту. Начните с адреса, слушателя и сетевой политики. Не называйте любую ошибку curl 7 таким отказом без соответствующего текста.

Таймаут равен отказу?

Нет. Таймаут означает, что соединение или согласование не завершилось в установленное время. Шлюз мог уже принять TCP и затем не ответить на CONNECT или SOCKS5-приветствие.

Почему неверный порт не всегда даёт отказ?

TCP может успешно подключиться к открытому порту, но клиент и сервер заговорят на разных протоколах. Затем возможны сброс, закрытие или ожидание. Сверяйте схему и порт вместе.

Стоит отключить проверку сертификатов?

Нет. Ошибка сертификата относится к TLS после установления туннеля либо к вмешательству в этот участок. Проверьте доверие, имя назначения и сеть; отключение проверки не исправляет DNS, закрытый порт или неверный протокол.

Определите последний завершённый этап

Этапы до пригодного ответа назначения
ЭтапЧто происходитЧто проверять
DNS и TCPРазрешение имени шлюза и открытие его портаАдрес, порт, локальную сеть и политику выхода
Протокол проксиHTTP CONNECT либо SOCKS5 и его авторизацияСовпадение схемы, порта и поддерживаемого входа
Ответ туннеляHTTP-шлюз отвечает статусом CONNECT407 отдельно от 403,502 или 503
TLS и HTTP назначенияКлиент проверяет сертификат и получает страницуИмя, доверенный CA и фактический ответ

CONNECT определён в RFC 9110. Ответ шлюза 200 только открывает туннель. Если его статус уже известен и неуспешен, используйте CONNECT-диагностику или 407, а не предположение о закрытом порте.

Сделайте два ограниченных сравнимых запроса

Скопируйте полное имя из Connection builder · English вместо YOUR_FULL_PROXY_USERNAME. Пароль curl запросит отдельно: не дописывайте его в команду. Выберите небольшой HTTPS-адрес, который разрешено проверять. example.com — зарезервированный пример, не рабочая цель вашей задачи.

Проверка HTTP-портаsh
curl --disable --silent --show-error --noproxy '' \
  --connect-timeout 10 --max-time 20 \
  --proxy 'http://gw.portproof.org:7000' \
  --proxy-user 'YOUR_FULL_PROXY_USERNAME' \
  --output /dev/null \
  --write-out 'curl_exit=%{exitcode} connect_status=%{http_connect}\n' \
  'https://example.com/'
Проверка SOCKS5-портаsh
curl --disable --silent --show-error --noproxy '' \
  --connect-timeout 10 --max-time 20 \
  --proxy 'socks5h://gw.portproof.org:7001' \
  --proxy-user 'YOUR_FULL_PROXY_USERNAME' \
  --output /dev/null \
  --write-out 'curl_exit=%{exitcode} connect_status=%{http_connect}\n' \
  'https://example.com/'

Каждая команда — один GET без автоматического повтора. --disable стоит первым и отключает стандартный конфигурационный файл curl; пустой --noproxy исключает неожиданное правило обхода. socks5h поручает разрешение имени назначения стороне прокси. У SOCKS нет HTTP-статуса CONNECT, поэтому 000 в этом поле ожидаем.

Для PowerShell используйте curl.exe и адаптируйте переносы строк. --connect-timeout10 и --max-time20 имеют разные роли. Не добавляйте -v в публичную диагностику: подробный вывод может раскрыть Proxy-Authorization, обратимо представляющий секрет. Пароль и полный логин в отчёте не нужны.

Сопоставляйте число с сообщением и версией

Ориентиры из исторических локальных фикстур, не гарантия всех версий
НаблюдениеПример признакаСледующий шаг
Закрытый порт7 и Failed to connect / Could not connectСверить имя и порт
Не завершено ожидание28 с уточнением этапаПроверить путь и ответ согласования
HTTP на SOCKS-портуСброс и 56 в исходной фикстуреИсправить пару протокол/порт
SOCKS на HTTP-порту28 или 97 в исходной фикстуреИсправить пару протокол/порт
HTTP-авторизация отклоненаCONNECT 407Проверить реквизиты
TLS после CONNECT60 и ошибка сертификатаПроверить доверие назначения

Английский источник фиксирует curl 8.7.1 и Requests 2.34.2/PySocks 1.7.1, а также различия более новых curl. Это исторические результаты с выбранными ответами локальных серверов, не измерение живого шлюза. Справка curl помогает прочитать используемую версию; не превращайте один номер в универсальное правило.

Меняйте по одному подтверждённому условию

  1. Сверьте хост, не перепечатывая его вручную; в сообщении DNS проверьте, какое имя не разрешилось.
  2. Сопоставьте HTTP либо SOCKS5 с правильным портом, не меняя схему только из-за HTTPS-назначения.
  3. Если политика позволяет, сравните тот же запрос из другого разрешённого подключения. Разница показывает контекст, но сама не устанавливает владельца неисправности.
  4. После паузы допустима ограниченная повторная проверка зависшего согласования; повторяющийся отказ передайте поддержке вместо бесконечного увеличения ожидания.
  5. Если различается только имя sticky-сессии, сохраните это наблюдение отдельно от хоста и пароля. Смена имени не обещает новый адрес.

Учитывайте обёртки исключений Requests

Ниже исходный диагностический пример с раздельными HTTP/SOCKS исключениями. PROXY_SERVER не содержит реквизиты; имя и пароль поступают отдельно. Для SOCKS нужен соответствующий установленный модуль. Сообщение исключения перед передачей поддержке проверьте на секреты: поведение других версий не обязано совпадать с исторической фикстурой.

Пара connect/read timeout не задаёт универсальный общий срок произвольного задания. Это диагностический пример; не переносите его вывод напрямую в публичные журналы.

proxy_failure_check.pypython
import os
from urllib.parse import quote

import requests

server = os.environ.get("PROXY_SERVER", "http://gw.portproof.org:7000")
scheme, _, address = server.partition("://")
if scheme not in ("http", "socks5h") or not address or "@" in address:
    raise SystemExit("Use http:// or socks5h:// with a host and port, no credentials")

user = quote(os.environ["PROXY_USER"], safe="")
password = quote(os.environ["PROXY_PASSWORD"], safe="")
proxy = f"{scheme}://{user}:{password}@{address}"

try:
    response = requests.get(
        "https://example.com/",
        proxies={"http": proxy, "https": proxy},
        timeout=(3.05, 27),
    )
    print("HTTP", response.status_code)
except requests.exceptions.ConnectTimeout:
    print("No answer from the proxy within the connect timeout")
except requests.exceptions.ProxyError as error:
    print("The HTTP proxy failed:", error)
except requests.exceptions.ConnectionError as error:
    print("Connection failed:", error)
except requests.exceptions.Timeout:
    print("Connected, but no answer within the read timeout")

Передайте минимальный отчёт

Отчёт без реквизитовtext
Checked at (UTC):
curl version:
Proxy scheme, hostname and port (no credentials):
Destination hostname and port:
curl error line (exact text):
curl_exit:
connect_status:
Same result from another network: yes / no / not checked
Session name, if the username has one:

Отдельно отметьте непроверенное, а не заменяйте его ответом «нет». Пример не измеряет скорость или страну. Если соединение работает, а рабочий клиент нет, сравните источники его настроек. Редакция от 2 ноября 2026 года сохраняет четыре исходных блока без изменений; новый сетевой тест и платёж не выполнялись.

Допустимое использование

Выполняйте только разрешённые действия в пределах правил назначения. Сохраняйте учётные данные и личное содержимое в тайне; соблюдайте политику допустимого использования · English.

Следующий шаг