Коды ошибок curl при работе через прокси
curl завершается с числовым кодом и коротким текстом. Через прокси чаще всего встречаются шесть кодов, и по номеру видно, на каком шаге остановился запрос.
Обновлено · Редакция Prokso
- Коды 5, 7 и 28 означают, что запрос не дошёл до прокси: имя хоста, соединение или тайм-аут
- Коды 56 и 97 чаще всего означают, что протокол не совпадает с портом или логин не принят
- Повторите команду с ключом -v и сверьте хост gw.prokso.com, порт и схему адреса
Что означает ошибка
Число в скобках в строке curl: (N) — код завершения, тот же, что и код ошибки libcurl. Документация libcurl описывает их так: (5) CURLE_COULDNT_RESOLVE_PROXY — не удалось определить адрес прокси по имени хоста; (7) CURLE_COULDNT_CONNECT — не удалось соединиться с хостом или прокси; (28) CURLE_OPERATION_TIMEDOUT — истёк заданный тайм-аут.
(35) CURLE_SSL_CONNECT_ERROR — сбой где-то во время рукопожатия SSL/TLS; (56) CURLE_RECV_ERROR — сбой при получении данных из сети; (97) CURLE_PROXY — ошибка рукопожатия с прокси. Для кода 97 libcurl отдельно сообщает, что именно пошло не так.
Коды 5, 7 и 28 обычно означают, что до прокси запрос не дошёл. Коды 56 и 97 — что соединение есть, но программа и прокси не договорились. Код 35 чаще всего касается шифрования между вами и сайтом, а не самого прокси.
Причины
- (5) — имя шлюза не превращается в адрес. Ошибка в имени хоста, лишний символ в строке или не работает DNS в вашей сети. Правильный хост —
gw.prokso.com. - (7) — соединение отклонено. Шлюз или сеть на вашей стороне отказали в соединении: например, корпоративный файрвол закрывает выход на нестандартные порты.
- (28) — ответ не пришёл вовремя. На портах вне 823, 824 и 10000–20000 шлюз не отвечает вовсе, поэтому curl ждёт до тайм-аута. Так же заканчивается слишком короткий лимит в ключах
-mили--connect-timeout. - (35) — сбой TLS с сайтом. Рукопожатие TLS с самим сайтом не удалось. Чаще всего антивирус или корпоративная сеть перехватывает шифрованные соединения и подставляет свой сертификат.
- (56) и (97) — протокол не совпадает с портом или логин не принят. Кодом 56 curl завершается, когда HTTP-запрос идёт на порт 824 (SOCKS5), когда адрес прокси начинается с
https://вместоhttp://и когда шлюз ответил 407. Неправильный логин на SOCKS5 даёт код 97 с текстомUser was rejected by the SOCKS5 server.
Как исправить
- Повторите команду с ключом
-vи найдите последнюю нормальную строку. Пошаговый разбор вывода — на странице «Прокси не работает: проверка». - Для (5) проверьте хост:
nslookup gw.prokso.comдолжен вернуть адреса. Если не возвращает, дело в DNS вашей сети или в опечатке. - Для (7) и (28) сверьте порт: 823 — HTTP, 824 — SOCKS5, 10000–20000 — фиксированный IP. Если порт правильный, попробуйте другую сеть, например мобильный интернет. О долгих запросах — на странице тайм-аут прокси.
- Для (35) временно отключите проверку HTTPS в антивирусе или попробуйте из сети без перехвата трафика. Подробнее — ошибки SSL-сертификата.
- Для (56) и (97) согласуйте схему с портом:
http://(неhttps://) для HTTP,socks5h://для 824 или фиксированных портов в режиме SOCKS5. Логин и пароль скопируйте из личного кабинета заново; синтаксис параметров — в справочнике шлюза.
Как проверить, что всё заработало
Выполните curl -x http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:10000 https://prokso.com/ip. Если пришёл JSON с IP и страной, прокси работает, а код завершения равен 0. Код последней команды показывает echo $? в Linux и macOS или $LASTEXITCODE в PowerShell. Примеры для разных задач — в инструкции curl.
Диагностика за 2 минуты
Сначала вставьте строку в проверку прокси. Если там прокси работает, причина в программе или её настройках. Если нет — проверьте строку из терминала:
curl -v -x "http://ЛОГИН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
- Строка
< HTTP/1.1 407сразу послеCONNECT— отвечает прокси. Название после кода, напримерNO_USER, подсказывает причину. - Прокси ответил на
CONNECTкодом 200, а дальше пришёл другой код — прокси работает, этот ответ дал сайт. - Никакого ответа, только тайм-аут — соединение не дошло до прокси: проверьте хост, порт и сеть.
Инструкции, где встречается эта ошибка
Вопросы и ответы
Чем код (5) отличается от (6)?
Код 6 (CURLE_COULDNT_RESOLVE_HOST) означает, что не удалось определить адрес самого сайта, а 5 — адрес прокси. С прокси код 6 бывает, когда curl сам ищет адрес сайта, например со схемой socks5:// вместо socks5h://, или когда прокси вообще не применился.
Что, если шлюз ответил 407?
Сам curl тогда завершается кодом (56), а причину видно только с ключом -v, например 407 NO_USER или 407 TRAFFIC_EXHAUSTED. Причины разобраны на странице <a href="/ru/errors/407-proxy-authentication-required">407 Proxy Authentication Required</a>.
Как узнать более точную причину?
Ключ -v показывает каждый этап, а текст после номера в строке curl: (N) уточняет сбой. Для кода 97 libcurl отдельно передаёт подробности о рукопожатии с прокси.
Как проверить прокси без терминала?
Вставьте строку в <a href="/ru/tools/proxy-checker">проверку прокси</a>: она покажет, работает ли прокси, протокол, внешний IP и страну.
Другие ошибки прокси
Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ
Регистрация за минуту, доступы сразу после оплаты.