Коди помилок 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="/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 ГБ
Реєстрація за хвилину, доступи одразу після оплати.