Коди помилок 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.

Як виправити

  1. Повторіть команду з ключем -v і знайдіть останній нормальний рядок. Покроковий розбір виводу — на сторінці «Проксі не працює: перевірка».
  2. Для (5) перевірте хост: nslookup gw.prokso.com має повернути адреси. Якщо не повертає, справа в DNS вашої мережі або в описці.
  3. Для (7) і (28) звірте порт: 823 — HTTP, 824 — SOCKS5, 10000–20000 — фіксований IP. Якщо порт правильний, спробуйте іншу мережу, наприклад мобільний інтернет. Про довгі запити — на сторінці тайм-аут проксі.
  4. Для (35) тимчасово вимкніть перевірку HTTPS в антивірусі або спробуйте з мережі без перехоплення трафіку. Детальніше — помилки SSL-сертифіката.
  5. Для (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="/errors/407-proxy-authentication-required">407 Proxy Authentication Required</a>.

Як дізнатися точнішу причину?

Ключ -v показує кожен етап, а текст після номера в рядку curl: (N) уточнює збій. Для коду 97 libcurl окремо передає подробиці про рукостискання з проксі.

Як перевірити проксі без терміналу?

Вставте рядок у <a href="/tools/proxy-checker">перевірку проксі</a>: вона покаже, чи працює проксі, протокол, зовнішній IP і країну.

Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ

Реєстрація за хвилину, доступи одразу після оплати.

Створити акаунт