Короткие ответы
Что означает connection refused?
Клиент получил отказ TCP по указанному пути, хосту и порту. Начните с адреса, слушателя и сетевой политики. Не называйте любую ошибку curl 7 таким отказом без соответствующего текста.
Таймаут равен отказу?
Нет. Таймаут означает, что соединение или согласование не завершилось в установленное время. Шлюз мог уже принять TCP и затем не ответить на CONNECT или SOCKS5-приветствие.
Почему неверный порт не всегда даёт отказ?
TCP может успешно подключиться к открытому порту, но клиент и сервер заговорят на разных протоколах. Затем возможны сброс, закрытие или ожидание. Сверяйте схему и порт вместе.
Стоит отключить проверку сертификатов?
Нет. Ошибка сертификата относится к TLS после установления туннеля либо к вмешательству в этот участок. Проверьте доверие, имя назначения и сеть; отключение проверки не исправляет DNS, закрытый порт или неверный протокол.
Определите последний завершённый этап
| Этап | Что происходит | Что проверять |
|---|---|---|
| DNS и TCP | Разрешение имени шлюза и открытие его порта | Адрес, порт, локальную сеть и политику выхода |
| Протокол прокси | HTTP CONNECT либо SOCKS5 и его авторизация | Совпадение схемы, порта и поддерживаемого входа |
| Ответ туннеля | HTTP-шлюз отвечает статусом CONNECT | 407 отдельно от 403,502 или 503 |
| TLS и HTTP назначения | Клиент проверяет сертификат и получает страницу | Имя, доверенный CA и фактический ответ |
CONNECT определён в RFC 9110. Ответ шлюза 200 только открывает туннель. Если его статус уже известен и неуспешен, используйте CONNECT-диагностику или 407, а не предположение о закрытом порте.
Сделайте два ограниченных сравнимых запроса
Скопируйте полное имя из Connection builder · English вместо YOUR_FULL_PROXY_USERNAME. Пароль curl запросит отдельно: не дописывайте его в команду. Выберите небольшой HTTPS-адрес, который разрешено проверять. example.com — зарезервированный пример, не рабочая цель вашей задачи.
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/'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 после CONNECT | 60 и ошибка сертификата | Проверить доверие назначения |
Английский источник фиксирует curl 8.7.1 и Requests 2.34.2/PySocks 1.7.1, а также различия более новых curl. Это исторические результаты с выбранными ответами локальных серверов, не измерение живого шлюза. Справка curl помогает прочитать используемую версию; не превращайте один номер в универсальное правило.
Меняйте по одному подтверждённому условию
- Сверьте хост, не перепечатывая его вручную; в сообщении DNS проверьте, какое имя не разрешилось.
- Сопоставьте HTTP либо SOCKS5 с правильным портом, не меняя схему только из-за HTTPS-назначения.
- Если политика позволяет, сравните тот же запрос из другого разрешённого подключения. Разница показывает контекст, но сама не устанавливает владельца неисправности.
- После паузы допустима ограниченная повторная проверка зависшего согласования; повторяющийся отказ передайте поддержке вместо бесконечного увеличения ожидания.
- Если различается только имя sticky-сессии, сохраните это наблюдение отдельно от хоста и пароля. Смена имени не обещает новый адрес.
Учитывайте обёртки исключений Requests
Ниже исходный диагностический пример с раздельными HTTP/SOCKS исключениями. PROXY_SERVER не содержит реквизиты; имя и пароль поступают отдельно. Для SOCKS нужен соответствующий установленный модуль. Сообщение исключения перед передачей поддержке проверьте на секреты: поведение других версий не обязано совпадать с исторической фикстурой.
Пара connect/read timeout не задаёт универсальный общий срок произвольного задания. Это диагностический пример; не переносите его вывод напрямую в публичные журналы.
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")Передайте минимальный отчёт
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.