Kode Error curl: Referensi Lengkap

Ketika perintah curl gagal, perintah ini mengembalikan kode keluar numerik (juga disebut kode error curl) yang mengidentifikasi jenis kesalahan. Anda dapat memeriksa kode keluar curl dengan menjalankan echo $? segera setelah perintah curl (atau $LASTEXITCODE di PowerShell). Kode keluar 0 berarti berhasil; angka lainnya menunjukkan masalah spesifik — dari kegagalan resolusi DNS dan timeout koneksi hingga masalah sertifikat SSL. Halaman ini adalah referensi lengkap kode error curl yang paling umum beserta penjelasan, penyebab, dan cara memperbaikinya. Jika Anda bekerja dengan perintah curl dalam kode Anda, tempelkan ke curl2code untuk mengonversi ke bahasa pemrograman pilihan Anda.

Tabel Referensi Cepat

0CURLE_OK

Berhasil. Operasi selesai tanpa kesalahan apa pun.

1CURLE_UNSUPPORTED_PROTOCOL

Protokol tidak didukung. URL menggunakan protokol yang tidak didukung oleh curl yang terinstal.

3CURLE_URL_MALFORMAT

URL tidak valid. Sintaks URL tidak valid atau tidak dapat diuraikan.

5CURLE_COULDNT_RESOLVE_PROXY

Tidak dapat meresolusi proxy. Nama host proxy yang ditentukan tidak dapat diresolusi.

6CURLE_COULDNT_RESOLVE_HOST

Pencarian DNS gagal — nama host tidak dapat diresolusi ke alamat IP.

7CURLE_COULDNT_CONNECT

Koneksi TCP gagal — server tidak aktif, port diblokir, atau firewall menolak koneksi.

18CURLE_PARTIAL_FILE

File parsial. Transfer terputus dan hanya sebagian file yang diterima.

22CURLE_HTTP_RETURNED_ERROR

Server mengembalikan error HTTP (4xx/5xx) dan flag --fail digunakan.

23CURLE_WRITE_ERROR

Error tulis. curl gagal menulis data yang diterima ke disk (izin ditolak atau disk penuh).

28CURLE_OPERATION_TIMEDOUT

Operasi melampaui waktu maksimum yang diizinkan (DNS, koneksi, atau transfer).

35CURLE_SSL_CONNECT_ERROR

Handshake SSL/TLS gagal — ketidakcocokan versi protokol atau cipher suite.

37CURLE_FILE_COULDNT_READ_FILE

Tidak dapat membaca file. File lokal yang direferensikan dalam permintaan tidak dapat dibuka atau dibaca.

52CURLE_GOT_NOTHING

Balasan kosong dari server. Server menutup koneksi tanpa mengirim data apa pun.

56CURLE_RECV_ERROR

Koneksi direset — server memutus koneksi selama transfer data.

60CURLE_SSL_CACERT

Verifikasi sertifikat SSL gagal — kadaluarsa, self-signed, atau bundle CA sudah usang.

77CURLE_SSL_CACERT_BADFILE

Masalah sertifikat CA SSL. Tidak dapat membaca atau menguraikan file sertifikat CA yang ditentukan.

92CURLE_HTTP2_STREAM

Error stream HTTP/2. Error stream level protokol HTTP/2 terjadi selama transfer.

Error 6: Tidak Dapat Meresolusi Host

Apa artinya
Terminal Anda menampilkan curl: (6) Could not resolve host. curl tidak dapat meresolusi nama host ke alamat IP — pencarian DNS gagal sebelum koneksi apa pun dicoba.
Penyebab
Penyebab paling umum adalah: kesalahan ketik pada nama host (misalnya, curl https://apiexample.com alih-alih api.example.com), masalah server DNS (DNS yang dikonfigurasi tidak aktif atau tidak dapat dijangkau), tidak ada koneksi jaringan (Wi-Fi terputus, VPN tidak terhubung), atau domain memang benar-benar tidak ada.
Cara memperbaiki
Pertama, pastikan URL sudah benar. Kemudian uji resolusi DNS secara langsung: nslookup api.example.com atau dig api.example.com. Jika DNS gagal, coba server DNS yang berbeda: curl --dns-servers 8.8.8.8 https://api.example.com. Periksa /etc/resolv.conf atau pengaturan jaringan Anda. Jika di belakang VPN perusahaan, pastikan DNS internal dapat meresolusi host tersebut.
$ curl https://api.exmple.com/users

Error 7: Gagal Terhubung

Apa artinya
Terminal Anda menampilkan curl: (7) Failed to connect to host port: Connection refused. curl berhasil meresolusi nama host tetapi tidak dapat membuat koneksi TCP ke server — koneksi ditolak secara aktif atau timeout pada level TCP.
Penyebab
Penyebab umum meliputi: server tidak aktif atau tidak berjalan, firewall memblokir port (periksa firewall lokal dan sisi server), port salah (misalnya, layanan berjalan di 8080 tetapi Anda terhubung ke 443), atau antrian listen server penuh karena beban tinggi.
Cara memperbaiki
Verifikasi server berjalan: ping api.example.com dan telnet api.example.com 443. Periksa apakah port yang benar terbuka: nmap -p 443 api.example.com. Nonaktifkan firewall lokal sementara untuk menguji. Jika menggunakan Docker, pastikan port container dipublikasikan. Coba dengan mode verbose: curl -v https://api.example.com untuk melihat di mana tepatnya koneksi gagal.
$ curl https://localhost:8080/api

Error 22: HTTP Mengembalikan Error

Apa artinya
Terminal Anda menampilkan curl: (22) The requested URL returned error. Server mengembalikan kode status error HTTP (4xx atau 5xx) dan curl dipanggil dengan -f atau --fail, yang memberitahu curl untuk memperlakukan error HTTP sebagai kegagalan.
Penyebab
Error ini dipicu oleh kode status HTTP seperti 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), atau 500 (Internal Server Error) — tetapi hanya ketika --fail digunakan. Tanpa --fail, curl keluar dengan kode 0 bahkan pada error HTTP. Penyebab umum: URL salah, autentikasi hilang, izin tidak mencukupi, atau bug sisi server.
Cara memperbaiki
Jalankan curl tanpa --fail untuk melihat body respons lengkap — sering kali berisi pesan error yang sebenarnya. Periksa kode status HTTP: curl -w "%{http_code}" -o /dev/null -s URL. Untuk 401/403: verifikasi token auth atau kunci API Anda. Untuk 404: periksa ulang path URL. Untuk 500: masalahnya ada di sisi server.
$ curl --fail https://api.example.com/nonexistent

Error 28: Operasi Timeout

Apa artinya
Terminal Anda menampilkan curl: (28) Operation timed out atau curl: (28) Connection timed out. Operasi memakan waktu lebih lama dari waktu yang diizinkan. Ini adalah error curl yang paling umum — dapat terjadi selama resolusi DNS, koneksi TCP, handshake SSL, atau transfer data.
Penyebab
Penyebab umum meliputi: server lambat atau kelebihan beban yang tidak merespons tepat waktu, kemacetan jaringan atau packet loss, firewall yang diam-diam membuang paket (tidak ada penolakan, hanya keheningan), nilai timeout yang terlalu ketat yang diatur dengan --connect-timeout atau --max-time, atau kesalahan konfigurasi proxy yang menyebabkan penundaan.
Cara memperbaiki
Tingkatkan timeout: curl --connect-timeout 30 --max-time 120 URL. Gunakan mode verbose untuk melihat di mana proses terhenti: curl -v URL. Uji latensi jaringan: ping api.example.com dan traceroute api.example.com. Jika di belakang proxy, coba lewati: curl --noproxy '*' URL. Untuk transfer file besar, pertimbangkan menggunakan --retry 3 dengan --retry-delay 5.
$ curl --connect-timeout 5 https://slow-api.example.com/data

Error 35: Error Koneksi SSL

Apa artinya
Terminal Anda menampilkan curl: (35) SSL connect error. Handshake SSL/TLS gagal — curl tidak dapat membuat koneksi aman dengan server.
Penyebab
Penyebab umum: ketidakcocokan versi TLS (server memerlukan TLS 1.3 tetapi curl Anda hanya mendukung hingga TLS 1.2), ketidakcocokan cipher suite, kesalahan konfigurasi SSL server (sertifikat kadaluarsa disajikan saat handshake, chain tidak lengkap), server sebenarnya tidak mendukung HTTPS pada port yang diberikan, atau proxy atau firewall mencegat koneksi SSL (MITM).
Cara memperbaiki
Paksa versi TLS tertentu: curl --tlsv1.2 URL atau curl --tlsv1.3 URL. Periksa apa yang didukung server: openssl s_client -connect api.example.com:443. Perbarui curl dan OpenSSL ke versi terbaru. Jika server menggunakan sertifikat self-signed, ini biasanya error 60 — error 35 biasanya menunjukkan kegagalan handshake level protokol.
$ curl https://legacy-server.example.com/api

Error 56: Kegagalan Penerimaan — Koneksi Direset

Apa artinya
Terminal Anda menampilkan curl: (56) Recv failure: Connection reset by peer. Koneksi berhasil dibuat, tetapi penerimaan data gagal — server menutup atau mereset koneksi secara tiba-tiba selama transfer.
Penyebab
Ini sering terjadi ketika: server crash atau restart di tengah transfer, load balancer atau proxy memutus koneksi (idle timeout, permintaan terlalu besar), firewall mengakhiri koneksi yang berlangsung lama, server memiliki keep-alive timeout yang lebih pendek dari yang diharapkan, atau ada gangguan jaringan antara klien dan server.
Cara memperbaiki
Coba permintaan lagi — masalah jaringan sementara adalah penyebab paling umum. Gunakan mode verbose: curl -v URL untuk melihat titik kegagalan yang tepat. Jika error terjadi selama unggahan besar, coba transfer chunked: curl -H "Transfer-Encoding: chunked" URL. Untuk operasi Git yang menampilkan RPC failed; curl 56, tingkatkan buffer: git config http.postBuffer 524288000.
$ curl https://api.example.com/large-download

Error 60: Masalah Sertifikat SSL

Apa artinya
Terminal Anda menampilkan curl: (60) SSL certificate problem: unable to get local issuer certificate. curl tidak dapat memverifikasi sertifikat SSL server terhadap bundle CA (Certificate Authority). Handshake TLS selesai pada level protokol, tetapi validasi sertifikat gagal.
Penyebab
Penyebab paling umum: server menggunakan sertifikat self-signed, sertifikat telah kadaluarsa, chain sertifikat tidak lengkap (sertifikat intermediate hilang), bundle CA curl sudah usang (umum pada sistem lama atau dalam container Docker), atau Common Name / SAN sertifikat tidak cocok dengan hostname yang diminta.
Cara memperbaiki
Perbarui bundle CA: curl --cacert /path/to/cacert.pem URL. Unduh bundle terbaru dari https://curl.se/ca/cacert.pem. Untuk mendiagnosis: openssl s_client -connect api.example.com:443 -showcerts. Untuk sertifikat self-signed dalam pengembangan, gunakan curl -k URL (jangan pernah di produksi — ini menonaktifkan semua verifikasi sertifikat). Di Docker, instal paket ca-certificates.
$ curl https://self-signed.example.com/api

Kode Error Lainnya

0CURLE_OK

Berhasil. Operasi selesai tanpa kesalahan apa pun.

1CURLE_UNSUPPORTED_PROTOCOL

Protokol tidak didukung. URL menggunakan protokol yang tidak didukung oleh curl yang terinstal.

3CURLE_URL_MALFORMAT

URL tidak valid. Sintaks URL tidak valid atau tidak dapat diuraikan.

5CURLE_COULDNT_RESOLVE_PROXY

Tidak dapat meresolusi proxy. Nama host proxy yang ditentukan tidak dapat diresolusi.

18CURLE_PARTIAL_FILE

File parsial. Transfer terputus dan hanya sebagian file yang diterima.

23CURLE_WRITE_ERROR

Error tulis. curl gagal menulis data yang diterima ke disk (izin ditolak atau disk penuh).

37CURLE_FILE_COULDNT_READ_FILE

Tidak dapat membaca file. File lokal yang direferensikan dalam permintaan tidak dapat dibuka atau dibaca.

52CURLE_GOT_NOTHING

Balasan kosong dari server. Server menutup koneksi tanpa mengirim data apa pun.

77CURLE_SSL_CACERT_BADFILE

Masalah sertifikat CA SSL. Tidak dapat membaca atau menguraikan file sertifikat CA yang ditentukan.

92CURLE_HTTP2_STREAM

Error stream HTTP/2. Error stream level protokol HTTP/2 terjadi selama transfer.

Cara Mendebug Error curl

Ketika curl gagal, ketiga flag ini membantu Anda mengidentifikasi akar masalah dengan cepat — dari resolusi DNS hingga handshake SSL hingga payload respons.

  1. 1

    Aktifkan output verbose

    Jalankan curl -v URL untuk melihat siklus permintaan/respons lengkap: resolusi DNS, koneksi TCP, handshake TLS, header permintaan yang dikirim, dan header respons yang diterima. Ini adalah flag debugging paling berguna.

  2. 2

    Periksa kode status HTTP

    Jalankan curl -o /dev/null -s -w "%{http_code}" URL untuk mendapatkan hanya kode status HTTP (200, 404, 500, dll.) tanpa body respons. Berguna untuk pemeriksaan kesehatan cepat dan scripting.

  3. 3

    Tampilkan error secara diam-diam

    Jalankan curl -sS URL untuk menyembunyikan progress bar (-s) tetapi tetap menampilkan error (-S). Sempurna untuk skrip di mana Anda menginginkan output bersih tetapi perlu menangkap kegagalan.

Pertanyaan yang Sering Diajukan

Bagaimana cara memeriksa kode keluar curl?

Setelah menjalankan perintah curl, kode keluar disimpan dalam variabel khusus shell. Di Bash/Zsh, jalankan echo $? segera setelah perintah curl. Di PowerShell, gunakan $LASTEXITCODE. Dalam skrip, Anda dapat memeriksanya dengan kondisional: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Kode keluar 0 berarti berhasil; angka lainnya menunjukkan error. Untuk melihat kode status HTTP dan kode keluar curl sekaligus, gabungkan curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". Perhatikan bahwa kode keluar curl berbeda dari kode status HTTP — curl mengembalikan 0 bahkan untuk HTTP 404 kecuali Anda menggunakan flag --fail.

Bagaimana cara memperbaiki curl error 28 (operation timed out)?

Error 28 berarti permintaan melampaui waktu maksimum yang diizinkan. Pertama, tingkatkan timeout: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout membatasi fase koneksi TCP, sementara --max-time membatasi seluruh operasi. Selanjutnya, diagnosis bottleneck dengan curl -v URL — output verbose menunjukkan di mana tepatnya curl terhenti (DNS, koneksi, TLS, atau transfer). Perbaikan umum: periksa koneksi jaringan dan pengaturan DNS Anda, verifikasi server merespons (ping dan telnet), lewati proxy dengan --noproxy '*', dan untuk unduhan besar tambahkan --retry 3 --retry-delay 5 untuk percobaan ulang otomatis.

Bagaimana cara memperbaiki error sertifikat SSL curl (error 60)?

Error 60 berarti curl tidak dapat memverifikasi sertifikat SSL server. Perbaikannya tergantung pada penyebabnya. Untuk bundle CA yang usang: unduh yang baru dari https://curl.se/ca/cacert.pem dan gunakan curl --cacert /path/to/cacert.pem URL. Untuk container Docker: instal paket ca-certificates (apt-get install ca-certificates). Untuk sertifikat self-signed dalam pengembangan: gunakan curl -k URL untuk melewati verifikasi — tetapi jangan pernah gunakan -k di produksi karena ini menonaktifkan semua pemeriksaan sertifikat. Untuk mendiagnosis: jalankan openssl s_client -connect host:443 -showcerts untuk memeriksa chain sertifikat. Jika sertifikat telah kadaluarsa atau hostname tidak cocok, masalahnya ada di sisi server.

Apa arti curl error 7 (failed to connect)?

Error 7 berarti curl berhasil meresolusi nama host ke alamat IP tetapi tidak dapat membuat koneksi TCP. Server secara aktif menolak koneksi atau percobaan koneksi timeout pada level jaringan. Penyebab umum: layanan tidak berjalan pada host target (periksa dengan systemctl status atau docker ps), firewall memblokir port (uji dengan telnet host port), Anda menggunakan port yang salah (misalnya, 80 alih-alih 443, atau 8080 untuk server pengembangan), atau antrian listen server penuh karena beban tinggi. Untuk mendebug: gunakan curl -v URL dan cari "Connected to" atau "Connection refused" di output.