Coduri de eroare curl: Referință completă
Când o comandă curl eșuează, aceasta returnează un cod numeric de ieșire (numit și cod de eroare curl) care identifică tipul erorii. Poți verifica codul de ieșire curl rulând echo $? imediat după comanda curl (sau $LASTEXITCODE în PowerShell). Codul de ieșire 0 înseamnă succes; orice alt număr indică o problemă specifică — de la erori de rezolvare DNS și timeout-uri de conexiune până la probleme cu certificatul SSL. Această pagină este o referință completă a celor mai comune coduri de eroare curl cu explicații, cauze și remedieri. Dacă lucrezi cu comenzi curl în codul tău, lipește-le în curl2code pentru a le converti în limbajul de programare preferat.
Tabel de referință rapidă
Succes. Operațiunea s-a finalizat fără erori.
Protocol nesuportat. URL-ul folosește un protocol pentru care curl nu a fost compilat.
URL malformat. Sintaxa URL-ului este invalidă sau nu a putut fi parsată.
Nu s-a putut rezolva proxy-ul. Numele de gazdă al proxy-ului specificat nu a putut fi rezolvat.
Căutarea DNS a eșuat — numele de gazdă nu a putut fi rezolvat într-o adresă IP.
Conexiunea TCP a eșuat — serverul este oprit, portul este blocat sau firewall-ul respinge conexiunile.
Fișier parțial. Transferul a fost întrerupt și doar o parte din fișier a fost primită.
Serverul a returnat o eroare HTTP (4xx/5xx) și a fost utilizat flag-ul --fail.
Eroare de scriere. curl nu a reușit să scrie datele primite pe disc (permisiune refuzată sau disc plin).
Operațiunea a depășit timpul maxim permis (DNS, conectare sau transfer).
Handshake-ul SSL/TLS a eșuat — nepotrivire de versiune de protocol sau suită de cifrare.
Nu s-a putut citi fișierul. Un fișier local referit în cerere nu a putut fi deschis sau citit.
Răspuns gol de la server. Serverul a închis conexiunea fără a trimite date.
Conexiunea a fost resetată — serverul a abandonat conexiunea în timpul transferului de date.
Verificarea certificatului SSL a eșuat — expirat, auto-semnat sau pachetul CA este învechit.
Problemă cu certificatul CA SSL. Fișierul de certificat CA specificat nu a putut fi citit sau parsat.
Eroare de flux HTTP/2. O eroare de protocol HTTP/2 la nivel de flux a apărut în timpul transferului.
Eroare 6: Nu s-a putut rezolva gazda
- Ce înseamnă
- Terminalul tău arată
curl: (6) Could not resolve host. curl nu a putut rezolva numele de gazdă într-o adresă IP — căutarea DNS a eșuat înainte de a se încerca vreo conexiune. - Cauze
- Cele mai frecvente cauze sunt: o greșeală de tastare în numele de gazdă (de ex.,
curl https://apiexample.comîn loc deapi.example.com), probleme cu serverul DNS (DNS-ul configurat este inaccesibil), lipsa conexiunii la rețea (Wi-Fi deconectat, VPN neconectat) sau domeniul efectiv nu există. - Cum se remediază
- Mai întâi, verifică dacă URL-ul este corect. Apoi testează rezolvarea DNS direct:
nslookup api.example.comsaudig api.example.com. Dacă DNS-ul eșuează, încearcă un alt server DNS:curl --dns-servers 8.8.8.8 https://api.example.com. Verifică/etc/resolv.confsau setările de rețea. Dacă ești în spatele unui VPN corporativ, asigură-te că DNS-ul intern poate rezolva gazda.
$ curl https://api.exmple.com/usersEroare 7: Conectarea a eșuat
- Ce înseamnă
- Terminalul tău arată
curl: (7) Failed to connect to host port: Connection refused. curl a rezolvat numele de gazdă, dar nu a putut stabili o conexiune TCP cu serverul — conexiunea a fost refuzată activ sau a expirat la nivel TCP. - Cauze
- Cauzele frecvente includ: serverul este oprit sau nu rulează, un firewall blochează portul (verifică atât firewall-ul local, cât și cel al serverului), portul este greșit (de ex., serviciul rulează pe 8080 dar te conectezi la 443) sau coada de așteptare a serverului este plină din cauza sarcinii mari.
- Cum se remediază
- Verifică dacă serverul rulează:
ping api.example.comșitelnet api.example.com 443. Verifică dacă portul corect este deschis:nmap -p 443 api.example.com. Dezactivează temporar firewall-ul local pentru a testa. Dacă folosești Docker, asigură-te că portul containerului este publicat. Încearcă cu modul verbose:curl -v https://api.example.compentru a vedea exact unde eșuează conexiunea.
$ curl https://localhost:8080/apiEroare 22: HTTP a returnat eroare
- Ce înseamnă
- Terminalul tău arată
curl: (22) The requested URL returned error. Serverul a returnat un cod de stare HTTP de eroare (4xx sau 5xx), iar curl a fost invocat cu-fsau--fail, ceea ce îi spune lui curl să trateze erorile HTTP drept eșecuri. - Cauze
- Eroarea este declanșată de coduri de stare HTTP precum 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) sau 500 (Internal Server Error) — dar doar când
--faileste utilizat. Fără--fail, curl iese cu codul 0 chiar și la erori HTTP. Cauze frecvente: URL greșit, autentificare lipsă, permisiuni insuficiente sau erori pe server. - Cum se remediază
- Rulează curl fără
--failpentru a vedea corpul complet al răspunsului — acesta conține adesea mesajul real de eroare. Verifică codul de stare HTTP:curl -w "%{http_code}" -o /dev/null -s URL. Pentru 401/403: verifică token-ul de autentificare sau cheia API. Pentru 404: verifică din nou calea URL-ului. Pentru 500: problema este pe server.
$ curl --fail https://api.example.com/nonexistentEroare 28: Operațiune expirată
- Ce înseamnă
- Terminalul tău arată
curl: (28) Operation timed outsaucurl: (28) Connection timed out. Operațiunea a durat mai mult decât timpul permis. Aceasta este cea mai frecventă eroare curl — poate apărea în timpul rezolvării DNS, conexiunii TCP, handshake-ului SSL sau transferului de date. - Cauze
- Cauzele tipice includ: server lent sau suprasolicitat care nu răspunde la timp, congestie de rețea sau pierdere de pachete, firewall care abandonează silențios pachetele (fără respingere, doar tăcere), valori de timeout prea stricte setate cu
--connect-timeoutsau--max-timesau o configurare greșită a proxy-ului care cauzează întârzieri. - Cum se remediază
- Crește timeout-ul:
curl --connect-timeout 30 --max-time 120 URL. Folosește modul verbose pentru a vedea unde se blochează:curl -v URL. Testează latența rețelei:ping api.example.comșitraceroute api.example.com. Dacă ești în spatele unui proxy, încearcă să-l ocolești:curl --noproxy '*' URL. Pentru transferuri mari de fișiere, ia în considerare utilizarea--retry 3cu--retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/dataEroare 35: Eroare de conectare SSL
- Ce înseamnă
- Terminalul tău arată
curl: (35) SSL connect error. Handshake-ul SSL/TLS a eșuat — curl nu a putut stabili o conexiune securizată cu serverul. - Cauze
- Cauze frecvente: nepotrivire a versiunii TLS (serverul necesită TLS 1.3 dar curl-ul tău suportă doar până la TLS 1.2), incompatibilitate a suitelor de cifrare, configurare SSL greșită a serverului (certificat expirat prezentat în timpul handshake-ului, lanț incomplet), serverul nu suportă de fapt HTTPS pe portul dat sau un proxy sau firewall interceptează conexiunea SSL (MITM).
- Cum se remediază
- Forțează o versiune TLS specifică:
curl --tlsv1.2 URLsaucurl --tlsv1.3 URL. Verifică ce suportă serverul:openssl s_client -connect api.example.com:443. Actualizează curl și OpenSSL la cele mai recente versiuni. Dacă serverul folosește un certificat auto-semnat, aceasta este de obicei eroarea 60 — eroarea 35 indică de obicei un eșec al handshake-ului la nivel de protocol.
$ curl https://legacy-server.example.com/apiEroare 56: Eșec de recepție — Conexiunea a fost resetată
- Ce înseamnă
- Terminalul tău arată
curl: (56) Recv failure: Connection reset by peer. Conexiunea a fost stabilită cu succes, dar recepția datelor a eșuat — serverul a închis sau a resetat conexiunea neașteptat în timpul transferului. - Cauze
- Aceasta se întâmplă adesea când: serverul se blochează sau repornește în timpul transferului, un load balancer sau proxy abandonează conexiunea (timeout de inactivitate, cerere prea mare), un firewall întrerupe conexiunile de lungă durată, serverul are un timeout de keep-alive mai scurt decât cel așteptat sau există o întrerupere de rețea între client și server.
- Cum se remediază
- Încearcă din nou cererea — problemele tranzitorii de rețea sunt cea mai frecventă cauză. Folosește modul verbose:
curl -v URLpentru a vedea punctul exact de eșec. Dacă eroarea apare în timpul încărcărilor mari, încearcă transferul fragmentat:curl -H "Transfer-Encoding: chunked" URL. Pentru operațiuni Git care aratăRPC failed; curl 56, crește buffer-ul:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadEroare 60: Problemă cu certificatul SSL
- Ce înseamnă
- Terminalul tău arată
curl: (60) SSL certificate problem: unable to get local issuer certificate. curl nu a putut verifica certificatul SSL al serverului față de pachetul său CA (Autoritate de Certificare). Handshake-ul TLS a fost completat la nivel de protocol, dar validarea certificatului a eșuat. - Cauze
- Cele mai frecvente cauze: serverul folosește un certificat auto-semnat, certificatul a expirat, lanțul de certificate este incomplet (lipsesc certificate intermediare), pachetul CA al curl este învechit (frecvent pe sisteme mai vechi sau în containere Docker) sau Common Name / SAN al certificatului nu corespunde cu numele de gazdă solicitat.
- Cum se remediază
- Actualizează pachetul CA:
curl --cacert /path/to/cacert.pem URL. Descarcă un pachet actualizat de la https://curl.se/ca/cacert.pem. Pentru diagnosticare:openssl s_client -connect api.example.com:443 -showcerts. Pentru certificate auto-semnate în dezvoltare, foloseștecurl -k URL(niciodată în producție — dezactivează toată verificarea certificatelor). În Docker, instalează pachetulca-certificates.
$ curl https://self-signed.example.com/apiAlte coduri de eroare
Succes. Operațiunea s-a finalizat fără erori.
Protocol nesuportat. URL-ul folosește un protocol pentru care curl nu a fost compilat.
URL malformat. Sintaxa URL-ului este invalidă sau nu a putut fi parsată.
Nu s-a putut rezolva proxy-ul. Numele de gazdă al proxy-ului specificat nu a putut fi rezolvat.
Fișier parțial. Transferul a fost întrerupt și doar o parte din fișier a fost primită.
Eroare de scriere. curl nu a reușit să scrie datele primite pe disc (permisiune refuzată sau disc plin).
Nu s-a putut citi fișierul. Un fișier local referit în cerere nu a putut fi deschis sau citit.
Răspuns gol de la server. Serverul a închis conexiunea fără a trimite date.
Problemă cu certificatul CA SSL. Fișierul de certificat CA specificat nu a putut fi citit sau parsat.
Eroare de flux HTTP/2. O eroare de protocol HTTP/2 la nivel de flux a apărut în timpul transferului.
Cum să depanezi erorile curl
Când curl eșuează, aceste trei flag-uri te ajută să identifici rapid cauza principală — de la rezolvarea DNS la handshake-ul SSL și până la payload-ul răspunsului.
- 1
Activează ieșirea verbose
Rulează
curl -v URLpentru a vedea ciclul complet cerere/răspuns: rezolvare DNS, conexiune TCP, handshake TLS, headere de cerere trimise și headere de răspuns primite. Acesta este cel mai util flag de depanare. - 2
Verifică codul de stare HTTP
Rulează
curl -o /dev/null -s -w "%{http_code}" URLpentru a obține doar codul de stare HTTP (200, 404, 500 etc.) fără corpul răspunsului. Util pentru verificări rapide de sănătate și scripting. - 3
Afișează erorile silențios
Rulează
curl -sS URLpentru a suprima bara de progres (-s), dar a afișa totuși erorile (-S). Perfect pentru scripturi în care vrei ieșire curată, dar ai nevoie să prinzi eșecurile.
Întrebări frecvente
Cum să verifici codul de ieșire curl?
După rularea unei comenzi curl, codul de ieșire este stocat în variabila specială a shell-ului. În Bash/Zsh, rulează echo $? imediat după comanda curl. În PowerShell, folosește $LASTEXITCODE. În scripturi, îl poți verifica cu o condiție: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Codul de ieșire 0 înseamnă succes; orice alt număr indică o eroare. Pentru a vedea atât codul de stare HTTP cât și codul de ieșire curl, combină curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Reține că codul de ieșire curl este diferit de codul de stare HTTP — curl returnează 0 chiar și pentru HTTP 404, cu excepția cazului în care folosești flag-ul --fail.
Cum să remediezi eroarea curl 28 (operațiune expirată)?
Eroarea 28 înseamnă că cererea a depășit timpul maxim permis. Mai întâi, crește timeout-ul: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout limitează faza conexiunii TCP, în timp ce --max-time limitează întreaga operațiune. Apoi, diagnostichează blocajul cu curl -v URL — ieșirea verbose arată exact unde se blochează curl (DNS, conectare, TLS sau transfer). Remedieri frecvente: verifică conexiunea la rețea și setările DNS, verifică dacă serverul răspunde (ping și telnet), ocolește proxy-urile cu --noproxy '*' și pentru descărcări mari adaugă --retry 3 --retry-delay 5 pentru reîncercări automate.
Cum să remediezi erorile de certificat SSL curl (eroare 60)?
Eroarea 60 înseamnă că curl nu poate verifica certificatul SSL al serverului. Remedierea depinde de cauză. Pentru un pachet CA învechit: descarcă unul nou de la https://curl.se/ca/cacert.pem și folosește curl --cacert /path/to/cacert.pem URL. Pentru containere Docker: instalează pachetul ca-certificates (apt-get install ca-certificates). Pentru certificate auto-semnate în dezvoltare: folosește curl -k URL pentru a omite verificarea — dar nu folosi niciodată -k în producție deoarece dezactivează toată verificarea certificatelor. Pentru diagnosticare: rulează openssl s_client -connect host:443 -showcerts pentru a inspecta lanțul de certificate. Dacă certificatul a expirat sau numele de gazdă nu corespunde, problema este pe server.
Ce înseamnă eroarea curl 7 (eșec de conectare)?
Eroarea 7 înseamnă că curl a rezolvat numele de gazdă într-o adresă IP, dar nu a putut stabili o conexiune TCP. Serverul a refuzat activ conexiunea sau tentativa de conectare a expirat la nivel de rețea. Cauze frecvente: serviciul nu rulează pe gazda țintă (verifică cu systemctl status sau docker ps), un firewall blochează portul (testează cu telnet host port), folosești portul greșit (de ex., 80 în loc de 443 sau 8080 pentru un server de dezvoltare) sau coada de așteptare a serverului este plină din cauza sarcinii mari. Pentru depanare: folosește curl -v URL și caută „Connected to” sau „Connection refused” în ieșire.