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
Berjaya. Operasi selesai tanpa sebarang ralat.
Protokol tidak disokong. URL menggunakan protokol yang curl tidak dibina dengan sokongannya.
URL cacat. Sintaks URL tidak sah atau tidak dapat dihurai.
Tidak dapat menyelesaikan proksi. Nama hos proksi yang dinyatakan tidak dapat diselesaikan.
Carian DNS gagal — nama hos tidak dapat diselesaikan kepada alamat IP.
Sambungan TCP gagal — pelayan tidak berfungsi, port disekat, atau tembok api menolak sambungan.
Fail separa. Pemindahan terganggu dan hanya sebahagian fail diterima.
Pelayan mengembalikan ralat HTTP (4xx/5xx) dan bendera --fail telah digunakan.
Ralat tulis. curl gagal menulis data yang diterima ke cakera (kebenaran ditolak atau cakera penuh).
Operasi melebihi masa maksimum yang dibenarkan (DNS, sambung, atau pemindahan).
Jabat tangan SSL/TLS gagal — ketidakpadanan versi protokol atau suite sifer.
Tidak dapat membaca fail. Fail tempatan yang dirujuk dalam permintaan tidak dapat dibuka atau dibaca.
Balasan kosong dari pelayan. Pelayan menutup sambungan tanpa menghantar sebarang data.
Sambungan ditetapkan semula — pelayan menjatuhkan sambungan semasa pemindahan data.
Pengesahan sijil SSL gagal — tamat tempoh, ditandatangani sendiri, atau himpunan CA sudah lapuk.
Masalah sijil CA SSL. Tidak dapat membaca atau menghurai fail sijil CA yang dinyatakan.
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.comdan bukannyaapi.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.comataudig 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.confatau tetapan rangkaian anda. Jika di belakang VPN korporat, pastikan DNS dalaman boleh menyelesaikan hos tersebut.
$ curl https://api.exmple.com/usersRalat 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.comdantelnet 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.comuntuk melihat dengan tepat di mana sambungan gagal.
$ curl https://localhost:8080/apiRalat 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-fatau--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
--faildigunakan. 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
--failuntuk 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/nonexistentRalat 28: Operasi Tamat Masa
- Apa maksudnya
- Terminal anda menunjukkan
curl: (28) Operation timed outataucurl: (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-timeoutatau--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.comdantraceroute api.example.com. Jika di belakang proksi, cuba pintaskannya:curl --noproxy '*' URL. Untuk pemindahan fail besar, pertimbangkan menggunakan--retry 3dengan--retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/dataRalat 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 URLataucurl --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/apiRalat 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 URLuntuk 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 menunjukkanRPC failed; curl 56, tingkatkan penimbal:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadRalat 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, gunakancurl -k URL(jangan sekali-kali dalam pengeluaran — ia melumpuhkan semua pengesahan sijil). Dalam Docker, pasang pakejca-certificates.
$ curl https://self-signed.example.com/apiKod Ralat Lain
Berjaya. Operasi selesai tanpa sebarang ralat.
Protokol tidak disokong. URL menggunakan protokol yang curl tidak dibina dengan sokongannya.
URL cacat. Sintaks URL tidak sah atau tidak dapat dihurai.
Tidak dapat menyelesaikan proksi. Nama hos proksi yang dinyatakan tidak dapat diselesaikan.
Fail separa. Pemindahan terganggu dan hanya sebahagian fail diterima.
Ralat tulis. curl gagal menulis data yang diterima ke cakera (kebenaran ditolak atau cakera penuh).
Tidak dapat membaca fail. Fail tempatan yang dirujuk dalam permintaan tidak dapat dibuka atau dibaca.
Balasan kosong dari pelayan. Pelayan menutup sambungan tanpa menghantar sebarang data.
Masalah sijil CA SSL. Tidak dapat membaca atau menghurai fail sijil CA yang dinyatakan.
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
Aktifkan output verbose
Jalankan
curl -v URLuntuk 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
Semak kod status HTTP
Jalankan
curl -o /dev/null -s -w "%{http_code}" URLuntuk mendapatkan hanya kod status HTTP (200, 404, 500, dll.) tanpa badan respons. Berguna untuk semakan kesihatan pantas dan skrip. - 3
Tunjukkan ralat secara senyap
Jalankan
curl -sS URLuntuk 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.