Kod Ralat curl: Rujukan Lengkap

Apabila arahan curl gagal, ia mengembalikan kod keluar berangka (juga dikenali sebagai kod ralat curl) yang mengenal pasti jenis ralat. Anda boleh menyemak kod keluar curl dengan menjalankan echo $? sejurus selepas arahan curl (atau $LASTEXITCODE dalam PowerShell). Kod keluar 0 bermaksud berjaya; sebarang nombor lain menunjukkan masalah tertentu — daripada kegagalan resolusi DNS dan tamat masa sambungan kepada isu sijil SSL. Halaman ini ialah rujukan lengkap kod ralat curl yang paling biasa dengan penerangan, punca, dan pembaikan. Jika anda bekerja dengan arahan curl dalam kod anda, tampalkannya ke curl2code untuk menukar kepada bahasa pengaturcaraan pilihan anda.

Jadual Rujukan Pantas

0CURLE_OK

Berjaya. Operasi selesai tanpa sebarang ralat.

1CURLE_UNSUPPORTED_PROTOCOL

Protokol tidak disokong. URL menggunakan protokol yang curl tidak dibina dengan sokongannya.

3CURLE_URL_MALFORMAT

URL cacat. Sintaks URL tidak sah atau tidak dapat dihurai.

5CURLE_COULDNT_RESOLVE_PROXY

Tidak dapat menyelesaikan proksi. Nama hos proksi yang dinyatakan tidak dapat diselesaikan.

6CURLE_COULDNT_RESOLVE_HOST

Carian DNS gagal — nama hos tidak dapat diselesaikan kepada alamat IP.

7CURLE_COULDNT_CONNECT

Sambungan TCP gagal — pelayan tidak berfungsi, port disekat, atau tembok api menolak sambungan.

18CURLE_PARTIAL_FILE

Fail separa. Pemindahan terganggu dan hanya sebahagian fail diterima.

22CURLE_HTTP_RETURNED_ERROR

Pelayan mengembalikan ralat HTTP (4xx/5xx) dan bendera --fail telah digunakan.

23CURLE_WRITE_ERROR

Ralat tulis. curl gagal menulis data yang diterima ke cakera (kebenaran ditolak atau cakera penuh).

28CURLE_OPERATION_TIMEDOUT

Operasi melebihi masa maksimum yang dibenarkan (DNS, sambung, atau pemindahan).

35CURLE_SSL_CONNECT_ERROR

Jabat tangan SSL/TLS gagal — ketidakpadanan versi protokol atau suite sifer.

37CURLE_FILE_COULDNT_READ_FILE

Tidak dapat membaca fail. Fail tempatan yang dirujuk dalam permintaan tidak dapat dibuka atau dibaca.

52CURLE_GOT_NOTHING

Balasan kosong dari pelayan. Pelayan menutup sambungan tanpa menghantar sebarang data.

56CURLE_RECV_ERROR

Sambungan ditetapkan semula — pelayan menjatuhkan sambungan semasa pemindahan data.

60CURLE_SSL_CACERT

Pengesahan sijil SSL gagal — tamat tempoh, ditandatangani sendiri, atau himpunan CA sudah lapuk.

77CURLE_SSL_CACERT_BADFILE

Masalah sijil CA SSL. Tidak dapat membaca atau menghurai fail sijil CA yang dinyatakan.

92CURLE_HTTP2_STREAM

Ralat strim HTTP/2. Ralat peringkat protokol HTTP/2 berlaku semasa pemindahan.

Ralat 6: Tidak Dapat Menyelesaikan Hos

Apa maksudnya
Terminal anda menunjukkan curl: (6) Could not resolve host. curl tidak dapat menyelesaikan nama hos kepada alamat IP — carian DNS gagal sebelum sebarang sambungan dicuba.
Punca
Punca yang paling biasa ialah: kesilapan taip dalam nama hos (cth., curl https://apiexample.com dan bukannya api.example.com), masalah pelayan DNS (DNS yang dikonfigurasikan anda tidak berfungsi atau tidak dapat dicapai), tiada sambungan rangkaian (Wi-Fi terputus, VPN tidak disambung), atau domain tersebut benar-benar tidak wujud.
Cara membaiki
Pertama, sahkan URL adalah betul. Kemudian uji resolusi DNS secara langsung: nslookup api.example.com atau dig api.example.com. Jika DNS gagal, cuba pelayan DNS yang berbeza: curl --dns-servers 8.8.8.8 https://api.example.com. Semak /etc/resolv.conf atau tetapan rangkaian anda. Jika di belakang VPN korporat, pastikan DNS dalaman boleh menyelesaikan hos tersebut.
$ curl https://api.exmple.com/users

Ralat 7: Gagal Menyambung

Apa maksudnya
Terminal anda menunjukkan curl: (7) Failed to connect to host port: Connection refused. curl menyelesaikan nama hos tetapi tidak dapat mewujudkan sambungan TCP ke pelayan — sambungan ditolak secara aktif atau tamat masa pada peringkat TCP.
Punca
Punca biasa termasuk: pelayan tidak berfungsi atau tidak berjalan, tembok api menyekat port (semak kedua-dua tembok api tempatan dan pelayan), port adalah salah (cth., perkhidmatan berjalan pada 8080 tetapi anda menyambung ke 443), atau tunggakan dengar pelayan penuh di bawah beban berat.
Cara membaiki
Sahkan pelayan sedang berjalan: ping api.example.com dan telnet api.example.com 443. Semak jika port yang betul terbuka: nmap -p 443 api.example.com. Lumpuhkan tembok api tempatan buat sementara untuk menguji. Jika menggunakan Docker, pastikan port kontena diterbitkan. Cuba dengan mod verbose: curl -v https://api.example.com untuk melihat dengan tepat di mana sambungan gagal.
$ curl https://localhost:8080/api

Ralat 22: HTTP Mengembalikan Ralat

Apa maksudnya
Terminal anda menunjukkan curl: (22) The requested URL returned error. Pelayan mengembalikan kod status ralat HTTP (4xx atau 5xx) dan curl dipanggil dengan -f atau --fail, yang memberitahu curl untuk menganggap ralat HTTP sebagai kegagalan.
Punca
Ralat ini dicetuskan oleh kod status HTTP seperti 400 (Permintaan Buruk), 401 (Tidak Dibenarkan), 403 (Dilarang), 404 (Tidak Ditemui), atau 500 (Ralat Pelayan Dalaman) — tetapi hanya apabila --fail digunakan. Tanpa --fail, curl keluar dengan kod 0 walaupun pada ralat HTTP. Punca biasa: URL salah, pengesahan tiada, kebenaran tidak mencukupi, atau pepijat bahagian pelayan.
Cara membaiki
Jalankan curl tanpa --fail untuk melihat badan respons penuh — ia sering mengandungi mesej ralat sebenar. Semak kod status HTTP: curl -w "%{http_code}" -o /dev/null -s URL. Untuk 401/403: sahkan token auth atau kunci API anda. Untuk 404: semak semula laluan URL. Untuk 500: masalah di bahagian pelayan.
$ curl --fail https://api.example.com/nonexistent

Ralat 28: Operasi Tamat Masa

Apa maksudnya
Terminal anda menunjukkan curl: (28) Operation timed out atau curl: (28) Connection timed out. Operasi mengambil masa lebih lama daripada masa yang dibenarkan. Ini ialah ralat curl yang paling biasa — ia boleh berlaku semasa resolusi DNS, sambungan TCP, jabat tangan SSL, atau pemindahan data.
Punca
Punca biasa termasuk: pelayan perlahan atau terlebih beban tidak bertindak balas dalam masa, kesesakan rangkaian atau kehilangan paket, tembok api menjatuhkan paket secara senyap (tiada penolakan, hanya senyap), nilai tamat masa yang terlalu ketat ditetapkan dengan --connect-timeout atau --max-time, atau konfigurasi proksi yang salah menyebabkan kelewatan.
Cara membaiki
Tingkatkan tamat masa: curl --connect-timeout 30 --max-time 120 URL. Gunakan mod verbose untuk melihat di mana ia terhenti: curl -v URL. Uji kependaman rangkaian: ping api.example.com dan traceroute api.example.com. Jika di belakang proksi, cuba pintaskannya: curl --noproxy '*' URL. Untuk pemindahan fail besar, pertimbangkan menggunakan --retry 3 dengan --retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/data

Ralat 35: Ralat Sambungan SSL

Apa maksudnya
Terminal anda menunjukkan curl: (35) SSL connect error. Jabat tangan SSL/TLS gagal — curl tidak dapat mewujudkan sambungan selamat dengan pelayan.
Punca
Punca biasa: ketidakpadanan versi TLS (pelayan memerlukan TLS 1.3 tetapi curl anda hanya menyokong sehingga TLS 1.2), ketidakserasian suite sifer, konfigurasi SSL pelayan yang salah (sijil tamat tempoh yang dibentangkan semasa jabat tangan, rantai tidak lengkap), pelayan sebenarnya tidak menyokong HTTPS pada port yang diberikan, atau proksi atau tembok api memintas sambungan SSL (MITM).
Cara membaiki
Paksa versi TLS tertentu: curl --tlsv1.2 URL atau curl --tlsv1.3 URL. Semak apa yang disokong oleh pelayan: openssl s_client -connect api.example.com:443. Kemas kini curl dan OpenSSL kepada versi terkini. Jika pelayan menggunakan sijil yang ditandatangani sendiri, ini biasanya ralat 60 — ralat 35 biasanya menunjukkan kegagalan jabat tangan pada peringkat protokol.
$ curl https://legacy-server.example.com/api

Ralat 56: Kegagalan Terima — Sambungan Ditetapkan Semula

Apa maksudnya
Terminal anda menunjukkan curl: (56) Recv failure: Connection reset by peer. Sambungan telah berjaya diwujudkan, tetapi penerimaan data gagal — pelayan menutup atau menetapkan semula sambungan secara tidak dijangka semasa pemindahan.
Punca
Ini sering berlaku apabila: pelayan ranap atau dimulakan semula semasa pemindahan, pengimbang beban atau proksi menjatuhkan sambungan (tamat masa melahu, permintaan terlalu besar), tembok api menamatkan sambungan yang berumur panjang, pelayan mempunyai tamat masa keep-alive yang lebih pendek daripada yang dijangka, atau terdapat gangguan rangkaian antara klien dan pelayan.
Cara membaiki
Cuba permintaan itu semula — isu rangkaian sementara ialah punca yang paling biasa. Gunakan mod verbose: curl -v URL untuk melihat titik kegagalan yang tepat. Jika ralat berlaku semasa muat naik besar, cuba pemindahan terpecah: curl -H "Transfer-Encoding: chunked" URL. Untuk operasi Git yang menunjukkan RPC failed; curl 56, tingkatkan penimbal: git config http.postBuffer 524288000.
$ curl https://api.example.com/large-download

Ralat 60: Masalah Sijil SSL

Apa maksudnya
Terminal anda menunjukkan curl: (60) SSL certificate problem: unable to get local issuer certificate. curl tidak dapat mengesahkan sijil SSL pelayan terhadap himpunan CA (Pihak Berkuasa Sijil). Jabat tangan TLS selesai pada peringkat protokol, tetapi pengesahan sijil gagal.
Punca
Punca paling biasa: pelayan menggunakan sijil yang ditandatangani sendiri, sijil telah tamat tempoh, rantai sijil tidak lengkap (sijil perantara tiada), himpunan CA curl sudah lapuk (biasa pada sistem lama atau dalam kontena Docker), atau Nama Biasa / SAN sijil tidak sepadan dengan nama hos yang diminta.
Cara membaiki
Kemas kini himpunan CA: curl --cacert /path/to/cacert.pem URL. Muat turun himpunan yang dikemas kini dari https://curl.se/ca/cacert.pem. Untuk mendiagnosis: openssl s_client -connect api.example.com:443 -showcerts. Untuk sijil yang ditandatangani sendiri dalam pembangunan, gunakan curl -k URL (jangan sekali-kali dalam pengeluaran — ia melumpuhkan semua pengesahan sijil). Dalam Docker, pasang pakej ca-certificates.
$ curl https://self-signed.example.com/api

Kod Ralat Lain

0CURLE_OK

Berjaya. Operasi selesai tanpa sebarang ralat.

1CURLE_UNSUPPORTED_PROTOCOL

Protokol tidak disokong. URL menggunakan protokol yang curl tidak dibina dengan sokongannya.

3CURLE_URL_MALFORMAT

URL cacat. Sintaks URL tidak sah atau tidak dapat dihurai.

5CURLE_COULDNT_RESOLVE_PROXY

Tidak dapat menyelesaikan proksi. Nama hos proksi yang dinyatakan tidak dapat diselesaikan.

18CURLE_PARTIAL_FILE

Fail separa. Pemindahan terganggu dan hanya sebahagian fail diterima.

23CURLE_WRITE_ERROR

Ralat tulis. curl gagal menulis data yang diterima ke cakera (kebenaran ditolak atau cakera penuh).

37CURLE_FILE_COULDNT_READ_FILE

Tidak dapat membaca fail. Fail tempatan yang dirujuk dalam permintaan tidak dapat dibuka atau dibaca.

52CURLE_GOT_NOTHING

Balasan kosong dari pelayan. Pelayan menutup sambungan tanpa menghantar sebarang data.

77CURLE_SSL_CACERT_BADFILE

Masalah sijil CA SSL. Tidak dapat membaca atau menghurai fail sijil CA yang dinyatakan.

92CURLE_HTTP2_STREAM

Ralat strim HTTP/2. Ralat peringkat protokol HTTP/2 berlaku semasa pemindahan.

Cara Menyahpepijat Ralat curl

Apabila curl gagal, tiga bendera ini membantu anda mengenal pasti punca dengan cepat — daripada resolusi DNS kepada jabat tangan SSL kepada muatan respons.

  1. 1

    Aktifkan output verbose

    Jalankan curl -v URL untuk melihat kitaran permintaan/respons penuh: resolusi DNS, sambungan TCP, jabat tangan TLS, pengepala permintaan dihantar, dan pengepala respons diterima. Ini ialah bendera penyahpepijatan paling berguna.

  2. 2

    Semak kod status HTTP

    Jalankan curl -o /dev/null -s -w "%{http_code}" URL untuk mendapatkan hanya kod status HTTP (200, 404, 500, dll.) tanpa badan respons. Berguna untuk semakan kesihatan pantas dan skrip.

  3. 3

    Tunjukkan ralat secara senyap

    Jalankan curl -sS URL untuk menyekat bar kemajuan (-s) tetapi masih menunjukkan ralat (-S). Sempurna untuk skrip di mana anda mahukan output bersih tetapi perlu menangkap kegagalan.

Soalan Lazim

Bagaimana menyemak kod keluar curl?

Selepas menjalankan arahan curl, kod keluar disimpan dalam pembolehubah khas shell. Dalam Bash/Zsh, jalankan echo $? sejurus selepas arahan curl. Dalam PowerShell, gunakan $LASTEXITCODE. Dalam skrip, anda boleh menyemaknya dengan syarat: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Kod keluar 0 bermaksud berjaya; sebarang nombor lain menunjukkan ralat. Untuk melihat kedua-dua kod status HTTP dan kod keluar curl, gabungkan curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Perhatikan bahawa kod keluar curl berbeza daripada kod status HTTP — curl mengembalikan 0 walaupun untuk HTTP 404 melainkan anda menggunakan bendera --fail.

Bagaimana membaiki ralat curl 28 (operasi tamat masa)?

Ralat 28 bermaksud permintaan melebihi masa maksimum yang dibenarkan. Pertama, tingkatkan tamat masa: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout mengehadkan fasa sambungan TCP, manakala --max-time mengehadkan keseluruhan operasi. Seterusnya, diagnosis kesesakan dengan curl -v URL — output verbose menunjukkan dengan tepat di mana curl terhenti (DNS, sambungan, TLS, atau pemindahan). Pembaikan biasa: semak sambungan rangkaian dan tetapan DNS anda, sahkan pelayan bertindak balas (ping dan telnet), pintas proksi dengan --noproxy '*', dan untuk muat turun besar tambah --retry 3 --retry-delay 5 untuk percubaan semula automatik.

Bagaimana membaiki ralat sijil SSL curl (ralat 60)?

Ralat 60 bermaksud curl tidak dapat mengesahkan sijil SSL pelayan. Pembaikan bergantung pada punca. Untuk himpunan CA yang lapuk: muat turun yang baru dari https://curl.se/ca/cacert.pem dan gunakan curl --cacert /path/to/cacert.pem URL. Untuk kontena Docker: pasang pakej ca-certificates (apt-get install ca-certificates). Untuk sijil yang ditandatangani sendiri dalam pembangunan: gunakan curl -k URL untuk melangkau pengesahan — tetapi jangan sekali-kali gunakan -k dalam pengeluaran kerana ia melumpuhkan semua pemeriksaan sijil. Untuk mendiagnosis: jalankan openssl s_client -connect host:443 -showcerts untuk memeriksa rantai sijil. Jika sijil telah tamat tempoh atau nama hos tidak sepadan, masalah di bahagian pelayan.

Apa maksud ralat curl 7 (gagal menyambung)?

Ralat 7 bermaksud curl menyelesaikan nama hos kepada alamat IP tetapi tidak dapat mewujudkan sambungan TCP. Pelayan secara aktif menolak sambungan atau percubaan sambungan tamat masa pada peringkat rangkaian. Punca biasa: perkhidmatan tidak berjalan pada hos sasaran (semak dengan systemctl status atau docker ps), tembok api menyekat port (uji dengan telnet host port), anda menggunakan port yang salah (cth., 80 dan bukannya 443, atau 8080 untuk pelayan dev), atau tunggakan dengar pelayan penuh di bawah beban berat. Untuk menyahpepijat: gunakan curl -v URL dan cari "Connected to" atau "Connection refused" dalam output.