Chybové kódy curl: Kompletná referenčná príručka

Keď príkaz curl zlyhá, vráti číselný exit kód (nazývaný aj chybový kód curl), ktorý identifikuje typ chyby. Exit kód môžete skontrolovať spustením echo $? ihneď po príkaze curl (alebo $LASTEXITCODE v PowerShell). Exit kód 0 znamená úspech; akékoľvek iné číslo indikuje konkrétny problém — od zlyhania DNS rozlíšenia a timeoutov pripojenia po problémy s SSL certifikátmi. Táto stránka je kompletná referenčná príručka najčastejších chybových kódov curl s vysvetleniami, príčinami a opravami. Ak pracujete s príkazmi curl vo svojom kóde, vložte ich do curl2code na konverziu do vášho programovacieho jazyka.

Rýchla referenčná tabuľka

0CURLE_OK

Úspech. Operácia bola dokončená bez akýchkoľvek chýb.

1CURLE_UNSUPPORTED_PROTOCOL

Nepodporovaný protokol. URL používa protokol, pre ktorý curl nebol zostavený.

3CURLE_URL_MALFORMAT

Chybne tvarená URL. Syntax URL je neplatná alebo sa nepodarilo sparsovať.

5CURLE_COULDNT_RESOLVE_PROXY

Nepodarilo sa rozlíšiť proxy. Zadaný názov hostiteľa proxy sa nepodarilo rozlíšiť.

6CURLE_COULDNT_RESOLVE_HOST

DNS vyhľadávanie zlyhalo — názov hostiteľa sa nepodarilo rozlíšiť na IP adresu.

7CURLE_COULDNT_CONNECT

TCP spojenie zlyhalo — server je vypnutý, port je blokovaný alebo firewall odmieta spojenia.

18CURLE_PARTIAL_FILE

Čiastočný súbor. Prenos bol prerušený a bol prijatý iba časť súboru.

22CURLE_HTTP_RETURNED_ERROR

Server vrátil HTTP chybu (4xx/5xx) a bol použitý príznak --fail.

23CURLE_WRITE_ERROR

Chyba zápisu. curl nedokázal zapísať prijaté dáta na disk (zamietnutý prístup alebo plný disk).

28CURLE_OPERATION_TIMEDOUT

Operácia prekročila maximálny povolený čas (DNS, pripojenie alebo prenos).

35CURLE_SSL_CONNECT_ERROR

SSL/TLS handshake zlyhal — nezhoda verzie protokolu alebo šifrovacej sady.

37CURLE_FILE_COULDNT_READ_FILE

Nepodarilo sa prečítať súbor. Lokálny súbor uvedený v požiadavke sa nepodarilo otvoriť alebo prečítať.

52CURLE_GOT_NOTHING

Prázdna odpoveď od servera. Server zatvoril spojenie bez odoslania akýchkoľvek dát.

56CURLE_RECV_ERROR

Spojenie bolo resetované — server ukončil spojenie počas prenosu dát.

60CURLE_SSL_CACERT

Overenie SSL certifikátu zlyhalo — expirovaný, self-signed alebo zastaraný CA balík.

77CURLE_SSL_CACERT_BADFILE

Problém s SSL CA certifikátom. Nepodarilo sa prečítať alebo sparsovať zadaný súbor CA certifikátu.

92CURLE_HTTP2_STREAM

Chyba HTTP/2 streamu. Počas prenosu nastala chyba na úrovni HTTP/2 protokolu.

Chyba 6: Nepodarilo sa rozlíšiť hostiteľa

Čo to znamená
Váš terminál zobrazuje curl: (6) Could not resolve host. curl nedokázal rozlíšiť názov hostiteľa na IP adresu — DNS vyhľadávanie zlyhalo ešte pred pokusom o spojenie.
Príčiny
Najčastejšie príčiny sú: preklep v názve hostiteľa (napr. curl https://apiexample.com namiesto api.example.com), problémy s DNS serverom (váš nakonfigurovaný DNS je nedostupný alebo nefunkčný), žiadne sieťové pripojenie (Wi-Fi odpojené, VPN nepripojená), alebo doména skutočne neexistuje.
Ako opraviť
Najprv skontrolujte, či je URL správna. Potom otestujte DNS rozlíšenie priamo: nslookup api.example.com alebo dig api.example.com. Ak DNS zlyhá, skúste iný DNS server: curl --dns-servers 8.8.8.8 https://api.example.com. Skontrolujte váš /etc/resolv.conf alebo nastavenia siete. Ak ste za firemnou VPN, uistite sa, že interný DNS dokáže rozlíšiť hostiteľa.
$ curl https://api.exmple.com/users

Chyba 7: Nepodarilo sa pripojiť

Čo to znamená
Váš terminál zobrazuje curl: (7) Failed to connect to host port: Connection refused. curl rozlíšil názov hostiteľa, ale nedokázal nadviazať TCP spojenie so serverom — spojenie bolo aktívne odmietnuté alebo vypršal čas na úrovni TCP.
Príčiny
Bežné príčiny zahŕňajú: server je vypnutý alebo nebeží, firewall blokuje port (skontrolujte lokálny aj serverový firewall), port je nesprávny (napr. služba beží na 8080, ale vy sa pripájate na 443), alebo je fronta spojení servera plná pri vysokej záťaži.
Ako opraviť
Overte, že server beží: ping api.example.com a telnet api.example.com 443. Skontrolujte, či je správny port otvorený: nmap -p 443 api.example.com. Dočasne vypnite lokálny firewall na test. Ak používate Docker, uistite sa, že port kontajnera je publikovaný. Skúste verbose režim: curl -v https://api.example.com na presné zistenie, kde spojenie zlyháva.
$ curl https://localhost:8080/api

Chyba 22: HTTP vrátil chybu

Čo to znamená
Váš terminál zobrazuje curl: (22) The requested URL returned error. Server vrátil HTTP chybový stavový kód (4xx alebo 5xx) a curl bol spustený s -f alebo --fail, čo hovorí curlu, aby HTTP chyby považoval za zlyhania.
Príčiny
Chybu spúšťajú HTTP stavové kódy ako 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) alebo 500 (Internal Server Error) — ale iba keď je použitý --fail. Bez --fail curl ukončí s kódom 0 aj pri HTTP chybách. Bežné príčiny: nesprávna URL, chýbajúca autentifikácia, nedostatočné oprávnenia alebo chyby na strane servera.
Ako opraviť
Spustite curl bez --fail na zobrazenie celého tela odpovede — často obsahuje skutočnú chybovú správu. Skontrolujte HTTP stavový kód: curl -w "%{http_code}" -o /dev/null -s URL. Pre 401/403: overte váš auth token alebo API kľúč. Pre 404: skontrolujte cestu URL. Pre 500: problém je na strane servera.
$ curl --fail https://api.example.com/nonexistent

Chyba 28: Operácia vypršala

Čo to znamená
Váš terminál zobrazuje curl: (28) Operation timed out alebo curl: (28) Connection timed out. Operácia trvala dlhšie ako povolený čas. Toto je najčastejšia chyba curl — môže nastať počas DNS rozlíšenia, TCP spojenia, SSL handshake alebo prenosu dát.
Príčiny
Typické príčiny zahŕňajú: pomalý alebo preťažený server neodpovedajúci včas, preťaženie siete alebo strata paketov, firewall ticho zahadzuje pakety (žiadne odmietnutie, len ticho), príliš prísne hodnoty timeout nastavené pomocou --connect-timeout alebo --max-time, alebo nesprávna konfigurácia proxy spôsobujúca oneskorenia.
Ako opraviť
Zvýšte timeout: curl --connect-timeout 30 --max-time 120 URL. Použite verbose režim na zistenie, kde to visí: curl -v URL. Otestujte latenciu siete: ping api.example.com a traceroute api.example.com. Ak ste za proxy, skúste ho obísť: curl --noproxy '*' URL. Pre veľké prenosy súborov zvážte použitie --retry 3 s --retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/data

Chyba 35: Chyba SSL spojenia

Čo to znamená
Váš terminál zobrazuje curl: (35) SSL connect error. SSL/TLS handshake zlyhal — curl nedokázal nadviazať bezpečné spojenie so serverom.
Príčiny
Bežné príčiny: nezhoda verzie TLS (server vyžaduje TLS 1.3, ale váš curl podporuje iba TLS 1.2), nekompatibilita šifrovacích sád, nesprávna SSL konfigurácia servera (expirovaný certifikát počas handshake, neúplný reťazec), server v skutočnosti nepodporuje HTTPS na danom porte, alebo proxy alebo firewall zachytáva SSL spojenie (MITM).
Ako opraviť
Vynúťte konkrétnu verziu TLS: curl --tlsv1.2 URL alebo curl --tlsv1.3 URL. Skontrolujte, čo server podporuje: openssl s_client -connect api.example.com:443. Aktualizujte curl a OpenSSL na najnovšie verzie. Ak server používa self-signed certifikát, ide zvyčajne o chybu 60 — chyba 35 typicky indikuje zlyhanie handshake na úrovni protokolu.
$ curl https://legacy-server.example.com/api

Chyba 56: Zlyhanie príjmu — Spojenie bolo resetované

Čo to znamená
Váš terminál zobrazuje curl: (56) Recv failure: Connection reset by peer. Spojenie bolo nadviazané úspešne, ale príjem dát zlyhal — server nečakane zatvoril alebo resetoval spojenie počas prenosu.
Príčiny
Toto sa často stáva, keď: server zlyhá alebo sa reštartuje počas prenosu, load balancer alebo proxy ukončí spojenie (timeout nečinnosti, príliš veľká požiadavka), firewall ukončuje dlhodobé spojenia, server má kratší keep-alive timeout ako sa očakávalo, alebo nastáva výpadok siete medzi klientom a serverom.
Ako opraviť
Skúste požiadavku znova — prechodné problémy siete sú najčastejšou príčinou. Použite verbose režim: curl -v URL na zistenie presného bodu zlyhania. Ak sa chyba vyskytuje pri veľkých uploadoch, skúste chunked prenos: curl -H "Transfer-Encoding: chunked" URL. Pre Git operácie zobrazujúce RPC failed; curl 56, zvýšte buffer: git config http.postBuffer 524288000.
$ curl https://api.example.com/large-download

Chyba 60: Problém s SSL certifikátom

Čo to znamená
Váš terminál zobrazuje curl: (60) SSL certificate problem: unable to get local issuer certificate. curl nedokázal overiť SSL certifikát servera voči svojmu CA (Certificate Authority) balíku. TLS handshake sa dokončil na úrovni protokolu, ale overenie certifikátu zlyhalo.
Príčiny
Najčastejšie príčiny: server používa self-signed certifikát, certifikát vypršal, reťazec certifikátov je neúplný (chýbajúce intermediate certifikáty), CA balík curlu je zastaraný (bežné na starších systémoch alebo v Docker kontajneroch), alebo Common Name / SAN certifikátu sa nezhoduje s požadovaným názvom hostiteľa.
Ako opraviť
Aktualizujte CA balík: curl --cacert /path/to/cacert.pem URL. Stiahnite aktualizovaný balík z https://curl.se/ca/cacert.pem. Na diagnostiku: openssl s_client -connect api.example.com:443 -showcerts. Pre self-signed certifikáty vo vývojovom prostredí použite curl -k URL (nikdy v produkcii — vypína všetky overenia certifikátov). V Dockeri nainštalujte balík ca-certificates.
$ curl https://self-signed.example.com/api

Ostatné chybové kódy

0CURLE_OK

Úspech. Operácia bola dokončená bez akýchkoľvek chýb.

1CURLE_UNSUPPORTED_PROTOCOL

Nepodporovaný protokol. URL používa protokol, pre ktorý curl nebol zostavený.

3CURLE_URL_MALFORMAT

Chybne tvarená URL. Syntax URL je neplatná alebo sa nepodarilo sparsovať.

5CURLE_COULDNT_RESOLVE_PROXY

Nepodarilo sa rozlíšiť proxy. Zadaný názov hostiteľa proxy sa nepodarilo rozlíšiť.

18CURLE_PARTIAL_FILE

Čiastočný súbor. Prenos bol prerušený a bol prijatý iba časť súboru.

23CURLE_WRITE_ERROR

Chyba zápisu. curl nedokázal zapísať prijaté dáta na disk (zamietnutý prístup alebo plný disk).

37CURLE_FILE_COULDNT_READ_FILE

Nepodarilo sa prečítať súbor. Lokálny súbor uvedený v požiadavke sa nepodarilo otvoriť alebo prečítať.

52CURLE_GOT_NOTHING

Prázdna odpoveď od servera. Server zatvoril spojenie bez odoslania akýchkoľvek dát.

77CURLE_SSL_CACERT_BADFILE

Problém s SSL CA certifikátom. Nepodarilo sa prečítať alebo sparsovať zadaný súbor CA certifikátu.

92CURLE_HTTP2_STREAM

Chyba HTTP/2 streamu. Počas prenosu nastala chyba na úrovni HTTP/2 protokolu.

Ako ladiť chyby curl

Keď curl zlyhá, tieto tri príznaky vám pomôžu rýchlo identifikovať príčinu — od DNS rozlíšenia po SSL handshake až po telo odpovede.

  1. 1

    Zapnite podrobný výstup

    Spustite curl -v URL na zobrazenie celého cyklu požiadavky/odpovede: DNS rozlíšenie, TCP spojenie, TLS handshake, odoslané hlavičky požiadavky a prijaté hlavičky odpovede. Toto je najužitočnejší ladiaci príznak.

  2. 2

    Skontrolujte HTTP stavový kód

    Spustite curl -o /dev/null -s -w "%{http_code}" URL na získanie iba HTTP stavového kódu (200, 404, 500 atď.) bez tela odpovede. Užitočné pre rýchle kontroly stavu a skriptovanie.

  3. 3

    Zobrazte chyby potichu

    Spustite curl -sS URL na potlačenie indikátora priebehu (-s), ale stále zobrazí chyby (-S). Ideálne pre skripty, kde chcete čistý výstup, ale potrebujete zachytiť zlyhania.

Často kladené otázky

Ako skontrolovať exit kód curl?

Po spustení príkazu curl je exit kód uložený v špeciálnej premennej shellu. V Bash/Zsh spustite echo $? ihneď po príkaze curl. V PowerShell použite $LASTEXITCODE. V skriptoch ho môžete skontrolovať podmienkou: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Exit kód 0 znamená úspech; akékoľvek iné číslo indikuje chybu. Na zobrazenie HTTP stavového kódu aj exit kódu curl skombinujte curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Poznámka: exit kód curl je odlišný od HTTP stavového kódu — curl vráti 0 aj pre HTTP 404, pokiaľ nepoužijete príznak --fail.

Ako opraviť chybu curl 28 (operácia vypršala)?

Chyba 28 znamená, že požiadavka prekročila maximálny povolený čas. Najprv zvýšte timeout: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout limituje fázu TCP spojenia, zatiaľ čo --max-time limituje celú operáciu. Potom diagnostikujte úzke hrdlo pomocou curl -v URL — podrobný výstup presne ukazuje, kde curl uviazne (DNS, pripojenie, TLS alebo prenos). Bežné opravy: skontrolujte sieťové pripojenie a nastavenia DNS, overte, že server odpovedá (ping a telnet), obíďte proxy pomocou --noproxy '*' a pre veľké sťahovania pridajte --retry 3 --retry-delay 5 pre automatické opakovanie.

Ako opraviť chyby SSL certifikátov curl (chyba 60)?

Chyba 60 znamená, že curl nedokáže overiť SSL certifikát servera. Oprava závisí od príčiny. Pre zastaraný CA balík: stiahnite nový z https://curl.se/ca/cacert.pem a použite curl --cacert /path/to/cacert.pem URL. Pre Docker kontajnery: nainštalujte balík ca-certificates (apt-get install ca-certificates). Pre self-signed certifikáty vo vývojovom prostredí: použite curl -k URL na preskočenie overenia — ale nikdy nepoužívajte -k v produkcii, pretože vypína všetky kontroly certifikátov. Na diagnostiku: spustite openssl s_client -connect host:443 -showcerts na kontrolu reťazca certifikátov. Ak certifikát vypršal alebo sa nezhoduje názov hostiteľa, problém je na strane servera.

Čo znamená chyba curl 7 (nepodarilo sa pripojiť)?

Chyba 7 znamená, že curl rozlíšil názov hostiteľa na IP adresu, ale nedokázal nadviazať TCP spojenie. Server aktívne odmietol spojenie alebo pokus o spojenie vypršal na úrovni siete. Bežné príčiny: služba nebeží na cieľovom hostiteľovi (skontrolujte pomocou systemctl status alebo docker ps), firewall blokuje port (otestujte pomocou telnet host port), používate nesprávny port (napr. 80 namiesto 443 alebo 8080 pre vývojový server), alebo je fronta spojení servera plná pri vysokej záťaži. Na ladenie: použite curl -v URL a hľadajte "Connected to" alebo "Connection refused" vo výstupe.