Кодови грешака curl: Комплетан референтни водич
Када curl команда не успе, враћа нумерички излазни код (познат и као curl код грешке) који идентификује тип грешке. Можете проверити curl излазни код покретањем echo $? одмах након curl команде (или $LASTEXITCODE у PowerShell-у). Излазни код 0 значи успех; било који други број указује на специфичан проблем — од неуспеха DNS резолуције и тајмаута повезивања до проблема са SSL сертификатима. Ова страница је комплетан референтни водич најчешћих curl кодова грешака са објашњењима, узроцима и решењима. Ако радите са curl командама у свом коду, налепите их у curl2code за конверзију у програмски језик по вашем избору.
Табела за брзу референцу
Успех. Операција је завршена без икаквих грешака.
Неподржан протокол. URL користи протокол за који curl није компајлиран.
Неисправан URL. Синтакса URL-а је неважећа или није могла бити парсирана.
Не може да разреши прокси. Наведено име хоста проксија није могло бити разрешено.
DNS претрага неуспела — име хоста није могло бити разрешено у IP адресу.
TCP повезивање неуспешно — сервер је пао, порт је блокиран или фајервол одбија везе.
Делимична датотека. Пренос је прекинут и примљен је само део датотеке.
Сервер је вратио HTTP грешку (4xx/5xx) и коришћен је --fail флег.
Грешка при записивању. curl није успео да запише примљене податке на диск (одбијена дозвола или диск пун).
Операција је прекорачила максимално дозвољено време (DNS, повезивање или пренос).
SSL/TLS руковање неуспело — неподударност верзије протокола или скупа шифара.
Не може да прочита датотеку. Локална датотека наведена у захтеву није могла бити отворена или прочитана.
Празан одговор од сервера. Сервер је затворио везу без слања икаквих података.
Веза је ресетована — сервер је прекинуо везу током преноса података.
Верификација SSL сертификата неуспела — истекао, самопотписан или CA пакет је застарео.
Проблем са SSL CA сертификатом. Није могуће прочитати или парсирати наведену датотеку CA сертификата.
Грешка HTTP/2 стрима. Дошло је до грешке HTTP/2 протокола на нивоу стрима током преноса.
Грешка 6: Не може да разреши хост
- Шта то значи
- Ваш терминал приказује
curl: (6) Could not resolve host. curl није успео да разреши име хоста у IP адресу — DNS претрага је неуспела пре било каквог покушаја повезивања. - Узроци
- Најчешћи узроци су: грешка у куцању имена хоста (нпр.
curl https://apiexample.comуместоapi.example.com), проблеми са DNS сервером (ваш конфигурисани DNS је пао или недоступан), нема мрежне везе (Wi-Fi искључен, VPN није повезан) или домен заиста не постоји. - Како поправити
- Прво проверите да ли је URL исправан. Затим тестирајте DNS резолуцију директно:
nslookup api.example.comилиdig api.example.com. Ако DNS не успе, пробајте други DNS сервер:curl --dns-servers 8.8.8.8 https://api.example.com. Проверите/etc/resolv.confили мрежна подешавања. Ако сте иза корпоративног VPN-а, уверите се да интерни DNS може да разреши хост.
$ curl https://api.exmple.com/usersГрешка 7: Повезивање неуспешно
- Шта то значи
- Ваш терминал приказује
curl: (7) Failed to connect to host port: Connection refused. curl је разрешио име хоста, али није успео да успостави TCP везу са сервером — веза је активно одбијена или је истекло време на TCP нивоу. - Узроци
- Уобичајени узроци укључују: сервер је пао или не ради, фајервол блокира порт (проверите и локални и серверски фајервол), порт је погрешан (нпр. сервис ради на 8080, а ви се повезујете на 443) или је серверов ред за чекање пун под великим оптерећењем.
- Како поправити
- Проверите да ли сервер ради:
ping api.example.comиtelnet api.example.com 443. Проверите да ли је исправан порт отворен:nmap -p 443 api.example.com. Привремено искључите локални фајервол за тестирање. Ако користите Docker, уверите се да је порт контејнера објављен. Пробајте са verbose режимом:curl -v https://api.example.comда видите тачно где веза не успева.
$ curl https://localhost:8080/apiГрешка 22: HTTP вратио грешку
- Шта то значи
- Ваш терминал приказује
curl: (22) The requested URL returned error. Сервер је вратио HTTP статусни код грешке (4xx или 5xx), а curl је покренут са-fили--fail, што налаже curl-у да третира HTTP грешке као неуспехе. - Узроци
- Грешку покрећу HTTP статусни кодови попут 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) или 500 (Internal Server Error) — али само када се користи
--fail. Без--fail, curl излази са кодом 0 чак и код HTTP грешака. Уобичајени узроци: погрешан URL, недостајућа аутентификација, недовољне дозволе или грешке на серверу. - Како поправити
- Покрените curl без
--failда видите цело тело одговора — оно често садржи стварну поруку о грешци. Проверите HTTP статусни код:curl -w "%{http_code}" -o /dev/null -s URL. За 401/403: проверите ваш auth токен или API кључ. За 404: двапут проверите URL путању. За 500: проблем је на страни сервера.
$ curl --fail https://api.example.com/nonexistentГрешка 28: Истекло време операције
- Шта то значи
- Ваш терминал приказује
curl: (28) Operation timed outилиcurl: (28) Connection timed out. Операција је трајала дуже од дозвољеног времена. Ово је најчешћа curl грешка — може настати током DNS резолуције, TCP повезивања, SSL руковања или преноса података. - Узроци
- Типични узроци укључују: спор или преоптерећен сервер који не одговара на време, загушење мреже или губитак пакета, фајервол тихо одбацује пакете (без одбијања, само тишина), превише строге вредности тајмаута постављене са
--connect-timeoutили--max-time, или погрешна конфигурација проксија која узрокује кашњења. - Како поправити
- Повећајте тајмаут:
curl --connect-timeout 30 --max-time 120 URL. Користите verbose режим да видите где се заглављује:curl -v URL. Тестирајте мрежну латенцију:ping api.example.comиtraceroute api.example.com. Ако сте иза проксија, пробајте да га заобиђете:curl --noproxy '*' URL. За пренос великих датотека, размотрите коришћење--retry 3са--retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/dataГрешка 35: Грешка SSL повезивања
- Шта то значи
- Ваш терминал приказује
curl: (35) SSL connect error. SSL/TLS руковање је неуспело — curl није успео да успостави безбедну везу са сервером. - Узроци
- Уобичајени узроци: неподударност верзије TLS-а (сервер захтева TLS 1.3, а ваш curl подржава само до TLS 1.2), некомпатибилност скупова шифара, погрешна SSL конфигурација сервера (истекао сертификат представљен током руковања, непотпун ланац), сервер заправо не подржава HTTPS на датом порту, или прокси или фајервол пресреће SSL везу (MITM).
- Како поправити
- Форсирајте одређену верзију TLS-а:
curl --tlsv1.2 URLилиcurl --tlsv1.3 URL. Проверите шта сервер подржава:openssl s_client -connect api.example.com:443. Ажурирајте curl и OpenSSL на најновије верзије. Ако сервер користи самопотписани сертификат, обично је то грешка 60 — грешка 35 обично указује на неуспех руковања на нивоу протокола.
$ curl https://legacy-server.example.com/apiГрешка 56: Неуспех пријема — Веза је ресетована
- Шта то значи
- Ваш терминал приказује
curl: (56) Recv failure: Connection reset by peer. Веза је успешно успостављена, али пријем података је неуспео — сервер је затворио или ресетовао везу неочекивано током преноса. - Узроци
- Ово се често дешава када: сервер се сруши или рестартује усред преноса, балансер оптерећења или прокси прекине везу (тајмаут неактивности, захтев превелик), фајервол прекида дуготрајне везе, сервер има keep-alive тајмаут краћи него што се очекује, или постоји мрежни прекид између клијента и сервера.
- Како поправити
- Пробајте захтев поново — пролазни мрежни проблеми су најчешћи узрок. Користите verbose режим:
curl -v URLда видите тачан тренутак неуспеха. Ако се грешка дешава током великих отпремања, пробајте chunked пренос:curl -H "Transfer-Encoding: chunked" URL. За Git операције које приказујуRPC failed; curl 56, повећајте бафер:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadГрешка 60: Проблем са SSL сертификатом
- Шта то значи
- Ваш терминал приказује
curl: (60) SSL certificate problem: unable to get local issuer certificate. curl није успео да верификује SSL сертификат сервера у односу на свој CA (Certificate Authority) пакет. TLS руковање је завршено на нивоу протокола, али валидација сертификата је неуспела. - Узроци
- Најчешћи узроци: сервер користи самопотписани сертификат, сертификат је истекао, ланац сертификата је непотпун (недостају међусертификати), curl-ов CA пакет је застарео (често на старијим системима или у Docker контејнерима), или Common Name / SAN сертификата се не подудара са захтеваним именом хоста.
- Како поправити
- Ажурирајте CA пакет:
curl --cacert /path/to/cacert.pem URL. Преузмите ажуриран пакет са https://curl.se/ca/cacert.pem. За дијагностику:openssl s_client -connect api.example.com:443 -showcerts. За самопотписане сертификате у развоју, користитеcurl -k URL(никада у продукцији — ово искључује све провере сертификата). У Docker-у, инсталирајтеca-certificatesпакет.
$ curl https://self-signed.example.com/apiОстали кодови грешака
Успех. Операција је завршена без икаквих грешака.
Неподржан протокол. URL користи протокол за који curl није компајлиран.
Неисправан URL. Синтакса URL-а је неважећа или није могла бити парсирана.
Не може да разреши прокси. Наведено име хоста проксија није могло бити разрешено.
Делимична датотека. Пренос је прекинут и примљен је само део датотеке.
Грешка при записивању. curl није успео да запише примљене податке на диск (одбијена дозвола или диск пун).
Не може да прочита датотеку. Локална датотека наведена у захтеву није могла бити отворена или прочитана.
Празан одговор од сервера. Сервер је затворио везу без слања икаквих података.
Проблем са SSL CA сертификатом. Није могуће прочитати или парсирати наведену датотеку CA сертификата.
Грешка HTTP/2 стрима. Дошло је до грешке HTTP/2 протокола на нивоу стрима током преноса.
Како дебаговати curl грешке
Када curl не успе, ова три флега помажу да брзо идентификујете основни узрок — од DNS резолуције до SSL руковања и садржаја одговора.
- 1
Укључите verbose излаз
Покрените
curl -v URLда видите цео циклус захтев/одговор: DNS резолуцију, TCP повезивање, TLS руковање, послата заглавља захтева и примљена заглавља одговора. Ово је најкориснији флег за дебаговање. - 2
Проверите HTTP статусни код
Покрените
curl -o /dev/null -s -w "%{http_code}" URLда добијете само HTTP статусни код (200, 404, 500 итд.) без тела одговора. Корисно за брзе провере здравља и скриптовање. - 3
Тихо приказивање грешака
Покрените
curl -sS URLда потиснете траку напретка (-s), али и даље прикажете грешке (-S). Савршено за скрипте где желите чист излаз, али морате да ухватите неуспехе.
Често постављана питања
Како проверити curl излазни код?
Након покретања curl команде, излазни код се чува у специјалној променљивој шела. У Bash/Zsh, покрените echo $? одмах након curl команде. У PowerShell-у, користите $LASTEXITCODE. У скриптама, можете га проверити условом: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Излазни код 0 значи успех; било који други број указује на грешку. Да видите и HTTP статусни код и curl излазни код, комбинујте curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Имајте на уму да се curl излазни код разликује од HTTP статусног кода — curl враћа 0 чак и за HTTP 404 осим ако не користите --fail флег.
Како поправити curl грешку 28 (истекло време операције)?
Грешка 28 значи да је захтев прекорачио максимално дозвољено време. Прво, повећајте тајмаут: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout ограничава фазу TCP повезивања, док --max-time ограничава целу операцију. Затим, дијагностикујте уско грло помоћу curl -v URL — verbose излаз показује тачно где се curl заглављује (DNS, повезивање, TLS или пренос). Уобичајена решења: проверите мрежну везу и DNS подешавања, проверите да ли сервер одговара (ping и telnet), заобиђите прокси са --noproxy '*' и за велика преузимања додајте --retry 3 --retry-delay 5 за аутоматске поновне покушаје.
Како поправити curl SSL грешке сертификата (грешка 60)?
Грешка 60 значи да curl не може да верификује SSL сертификат сервера. Решење зависи од узрока. За застарео CA пакет: преузмите свеж са https://curl.se/ca/cacert.pem и користите curl --cacert /path/to/cacert.pem URL. За Docker контејнере: инсталирајте ca-certificates пакет (apt-get install ca-certificates). За самопотписане сертификате у развоју: користите curl -k URL да прескочите верификацију — али никада не користите -k у продукцији јер искључује сву проверу сертификата. За дијагностику: покрените openssl s_client -connect host:443 -showcerts да прегледате ланац сертификата. Ако је сертификат истекао или се име хоста не подудара, проблем је на страни сервера.
Шта значи curl грешка 7 (неуспешно повезивање)?
Грешка 7 значи да је curl разрешио име хоста у IP адресу, али није успео да успостави TCP везу. Сервер је активно одбио везу или је покушај повезивања истекао на мрежном нивоу. Уобичајени узроци: сервис не ради на циљном хосту (проверите са systemctl status или docker ps), фајервол блокира порт (тестирајте са telnet host port), користите погрешан порт (нпр. 80 уместо 443, или 8080 за dev сервер), или је серверов ред за чекање пун под великим оптерећењем. За дебаговање: користите curl -v URL и потражите "Connected to" или "Connection refused" у излазу.