curl Hata Kodları: Tam Referans
Bir curl komutu başarısız olduğunda, hatanın türünü tanımlayan sayısal bir çıkış kodu (curl hata kodu olarak da adlandırılır) döndürür. curl çıkış kodunu, curl komutunun hemen ardından echo $? çalıştırarak kontrol edebilirsiniz (PowerShell'de $LASTEXITCODE). Çıkış kodu 0 başarı anlamına gelir; diğer herhangi bir sayı belirli bir sorunu gösterir — DNS çözümleme hatalarından bağlantı zaman aşımlarına ve SSL sertifika sorunlarına kadar. Bu sayfa, en yaygın curl hata kodlarının açıklamaları, nedenleri ve çözümleriyle birlikte tam bir referansıdır. Kodunuzda curl komutlarıyla çalışıyorsanız, tercih ettiğiniz programlama diline dönüştürmek için bunları curl2code'a yapıştırın.
Hızlı Referans Tablosu
Başarılı. İşlem herhangi bir hata olmadan tamamlandı.
Desteklenmeyen protokol. URL, curl'ün desteklemediği bir protokol kullanıyor.
Hatalı URL. URL söz dizimi geçersiz veya ayrıştırılamadı.
Proxy çözümlenemedi. Belirtilen proxy ana bilgisayar adı çözümlenemedi.
DNS sorgusu başarısız oldu — ana bilgisayar adı bir IP adresine çözümlenemedi.
TCP bağlantısı başarısız oldu — sunucu kapalı, port engellenmiş veya güvenlik duvarı bağlantıları reddediyor.
Kısmi dosya. Aktarım kesildi ve dosyanın yalnızca bir kısmı alındı.
Sunucu bir HTTP hatası (4xx/5xx) döndürdü ve --fail bayrağı kullanıldı.
Yazma hatası. curl alınan verileri diske yazamadı (izin reddedildi veya disk dolu).
İşlem izin verilen maksimum süreyi aştı (DNS, bağlantı veya aktarım).
SSL/TLS el sıkışması başarısız oldu — protokol sürümü veya şifre paketi uyumsuzluğu.
Dosya okunamadı. İstekte referans verilen yerel dosya açılamadı veya okunamadı.
Sunucudan boş yanıt. Sunucu herhangi bir veri göndermeden bağlantıyı kapattı.
Bağlantı sıfırlandı — sunucu veri aktarımı sırasında bağlantıyı düşürdü.
SSL sertifika doğrulaması başarısız oldu — süresi dolmuş, kendinden imzalı veya CA paketi güncel değil.
SSL CA sertifika sorunu. Belirtilen CA sertifika dosyası okunamadı veya ayrıştırılamadı.
HTTP/2 akış hatası. Aktarım sırasında HTTP/2 protokol düzeyinde bir akış hatası oluştu.
Hata 6: Ana Bilgisayar Çözümlenemedi
- Ne anlama gelir
- Terminalinizde
curl: (6) Could not resolve hostgörüntülenir. curl, ana bilgisayar adını bir IP adresine çözümleyemedi — herhangi bir bağlantı girişiminden önce DNS sorgusu başarısız oldu. - Nedenler
- En yaygın nedenler şunlardır: ana bilgisayar adında yazım hatası (örneğin,
api.example.comyerinecurl https://apiexample.com), DNS sunucusu sorunları (yapılandırılmış DNS'iniz çalışmıyor veya erişilemiyor), ağ bağlantısı yok (Wi-Fi bağlı değil, VPN bağlı değil) veya alan adı gerçekten mevcut değil. - Nasıl düzeltilir
- Önce URL'nin doğru olduğunu doğrulayın. Ardından DNS çözümlemesini doğrudan test edin:
nslookup api.example.comveyadig api.example.com. DNS başarısız olursa, farklı bir DNS sunucusu deneyin:curl --dns-servers 8.8.8.8 https://api.example.com./etc/resolv.confveya ağ ayarlarınızı kontrol edin. Kurumsal bir VPN arkasındaysanız, dahili DNS'in ana bilgisayarı çözümleyebildiğinden emin olun.
$ curl https://api.exmple.com/usersHata 7: Bağlantı Kurulamadı
- Ne anlama gelir
- Terminalinizde
curl: (7) Failed to connect to host port: Connection refusedgörüntülenir. curl ana bilgisayar adını çözümledi ancak sunucuya TCP bağlantısı kuramadı — bağlantı aktif olarak reddedildi veya TCP düzeyinde zaman aşımına uğradı. - Nedenler
- Yaygın nedenler şunlardır: sunucu çalışmıyor veya kapalı, güvenlik duvarı portu engelliyor (hem yerel hem de sunucu tarafı güvenlik duvarlarını kontrol edin), port yanlış (örneğin, servis 8080'de çalışıyor ama siz 443'e bağlanıyorsunuz) veya sunucunun dinleme kuyruğu dolu yoğun yük altında.
- Nasıl düzeltilir
- Sunucunun çalıştığını doğrulayın:
ping api.example.comvetelnet api.example.com 443. Doğru portun açık olup olmadığını kontrol edin:nmap -p 443 api.example.com. Test için yerel güvenlik duvarını geçici olarak devre dışı bırakın. Docker kullanıyorsanız, konteyner portunun yayınlandığından emin olun. Bağlantının tam olarak nerede başarısız olduğunu görmek için ayrıntılı modla deneyin:curl -v https://api.example.com.
$ curl https://localhost:8080/apiHata 22: HTTP Hatası Döndürüldü
- Ne anlama gelir
- Terminalinizde
curl: (22) The requested URL returned errorgörüntülenir. Sunucu bir HTTP hata durum kodu (4xx veya 5xx) döndürdü ve curl, HTTP hatalarını başarısızlık olarak değerlendirmesini söyleyen-fveya--failile çağrıldı. - Nedenler
- Hata, 400 (Hatalı İstek), 401 (Yetkisiz), 403 (Yasak), 404 (Bulunamadı) veya 500 (Sunucu Hatası) gibi HTTP durum kodları tarafından tetiklenir — ancak yalnızca
--failkullanıldığında.--failolmadan, curl HTTP hatalarında bile 0 koduyla çıkar. Yaygın nedenler: yanlış URL, eksik kimlik doğrulama, yetersiz izinler veya sunucu tarafı hataları. - Nasıl düzeltilir
- Tam yanıt gövdesini görmek için curl'ü
--failolmadan çalıştırın — genellikle gerçek hata mesajını içerir. HTTP durum kodunu kontrol edin:curl -w "%{http_code}" -o /dev/null -s URL. 401/403 için: kimlik doğrulama tokenınızı veya API anahtarınızı doğrulayın. 404 için: URL yolunu iki kez kontrol edin. 500 için: sorun sunucu tarafındadır.
$ curl --fail https://api.example.com/nonexistentHata 28: İşlem Zaman Aşımına Uğradı
- Ne anlama gelir
- Terminalinizde
curl: (28) Operation timed outveyacurl: (28) Connection timed outgörüntülenir. İşlem izin verilen süreyi aştı. Bu en yaygın curl hatasıdır — DNS çözümlemesi, TCP bağlantısı, SSL el sıkışması veya veri aktarımı sırasında oluşabilir. - Nedenler
- Tipik nedenler şunlardır: zamanında yanıt vermeyen yavaş veya aşırı yüklü sunucu, ağ tıkanıklığı veya paket kaybı, paketleri sessizce düşüren güvenlik duvarı (reddetme yok, sadece sessizlik),
--connect-timeoutveya--max-timeile ayarlanmış aşırı katı zaman aşımı değerleri veya gecikmelere neden olan proxy yanlış yapılandırması. - Nasıl düzeltilir
- Zaman aşımını artırın:
curl --connect-timeout 30 --max-time 120 URL. Nerede takıldığını görmek için ayrıntılı modu kullanın:curl -v URL. Ağ gecikmesini test edin:ping api.example.comvetraceroute api.example.com. Proxy arkasındaysanız, atlamayı deneyin:curl --noproxy '*' URL. Büyük dosya aktarımları için--retry 3ile--retry-delay 5kullanmayı düşünün.
$ curl --connect-timeout 5 https://slow-api.example.com/dataHata 35: SSL Bağlantı Hatası
- Ne anlama gelir
- Terminalinizde
curl: (35) SSL connect errorgörüntülenir. SSL/TLS el sıkışması başarısız oldu — curl sunucuyla güvenli bir bağlantı kuramadı. - Nedenler
- Yaygın nedenler: TLS sürüm uyumsuzluğu (sunucu TLS 1.3 gerektiriyor ama curl'ünüz yalnızca TLS 1.2'ye kadar destekliyor), şifre paketi uyumsuzluğu, sunucu SSL yanlış yapılandırması (el sıkışma sırasında süresi dolmuş sertifika sunulması, eksik zincir), sunucunun verilen portta gerçekte HTTPS desteklememesi veya proxy veya güvenlik duvarının SSL bağlantısını kesmesi (MITM).
- Nasıl düzeltilir
- Belirli bir TLS sürümünü zorlayın:
curl --tlsv1.2 URLveyacurl --tlsv1.3 URL. Sunucunun neyi desteklediğini kontrol edin:openssl s_client -connect api.example.com:443. curl ve OpenSSL'i en son sürümlere güncelleyin. Sunucu kendinden imzalı bir sertifika kullanıyorsa, bu genellikle hata 60'tır — hata 35 tipik olarak protokol düzeyinde bir el sıkışma başarısızlığını gösterir.
$ curl https://legacy-server.example.com/apiHata 56: Alma Hatası — Bağlantı Sıfırlandı
- Ne anlama gelir
- Terminalinizde
curl: (56) Recv failure: Connection reset by peergörüntülenir. Bağlantı başarıyla kuruldu, ancak veri alımı başarısız oldu — sunucu aktarım sırasında bağlantıyı beklenmedik şekilde kapattı veya sıfırladı. - Nedenler
- Bu genellikle şu durumlarda olur: sunucu aktarım ortasında çöker veya yeniden başlar, yük dengeleyici veya proxy bağlantıyı düşürür (boşta kalma zaman aşımı, çok büyük istek), güvenlik duvarı uzun süreli bağlantıları sonlandırır, sunucunun keep-alive zaman aşımı beklenenden kısa olması veya istemci ile sunucu arasında ağ kesintisi yaşanması.
- Nasıl düzeltilir
- İsteği tekrar deneyin — geçici ağ sorunları en yaygın nedendir. Tam başarısızlık noktasını görmek için ayrıntılı modu kullanın:
curl -v URL. Hata büyük yüklemeler sırasında oluşuyorsa, parçalı aktarımı deneyin:curl -H "Transfer-Encoding: chunked" URL.RPC failed; curl 56gösteren Git işlemleri için tamponu artırın:git config http.postBuffer 524288000.
$ curl https://api.example.com/large-downloadHata 60: SSL Sertifika Sorunu
- Ne anlama gelir
- Terminalinizde
curl: (60) SSL certificate problem: unable to get local issuer certificategörüntülenir. curl, sunucunun SSL sertifikasını CA (Sertifika Yetkilisi) paketine karşı doğrulayamadı. TLS el sıkışması protokol düzeyinde tamamlandı, ancak sertifika doğrulaması başarısız oldu. - Nedenler
- En yaygın nedenler: sunucu kendinden imzalı bir sertifika kullanıyor, sertifikanın süresi dolmuş, sertifika zinciri eksik (ara sertifikalar eksik), curl'ün CA paketi güncel değil (eski sistemlerde veya Docker konteynerlerinde yaygın) veya sertifikanın Common Name / SAN değeri istenen ana bilgisayar adıyla eşleşmiyor.
- Nasıl düzeltilir
- CA paketini güncelleyin:
curl --cacert /path/to/cacert.pem URL. Güncellenmiş bir paketi https://curl.se/ca/cacert.pem adresinden indirin. Teşhis için:openssl s_client -connect api.example.com:443 -showcerts. Geliştirme ortamında kendinden imzalı sertifikalar içincurl -k URLkullanın (üretimde asla kullanmayın — tüm sertifika doğrulamayı devre dışı bırakır). Docker'daca-certificatespaketini yükleyin.
$ curl https://self-signed.example.com/apiDiğer Hata Kodları
Başarılı. İşlem herhangi bir hata olmadan tamamlandı.
Desteklenmeyen protokol. URL, curl'ün desteklemediği bir protokol kullanıyor.
Hatalı URL. URL söz dizimi geçersiz veya ayrıştırılamadı.
Proxy çözümlenemedi. Belirtilen proxy ana bilgisayar adı çözümlenemedi.
Kısmi dosya. Aktarım kesildi ve dosyanın yalnızca bir kısmı alındı.
Yazma hatası. curl alınan verileri diske yazamadı (izin reddedildi veya disk dolu).
Dosya okunamadı. İstekte referans verilen yerel dosya açılamadı veya okunamadı.
Sunucudan boş yanıt. Sunucu herhangi bir veri göndermeden bağlantıyı kapattı.
SSL CA sertifika sorunu. Belirtilen CA sertifika dosyası okunamadı veya ayrıştırılamadı.
HTTP/2 akış hatası. Aktarım sırasında HTTP/2 protokol düzeyinde bir akış hatası oluştu.
curl Hatalarını Nasıl Ayıklarsınız
curl başarısız olduğunda, bu üç bayrak DNS çözümlemesinden SSL el sıkışmasına ve yanıt yüküne kadar kök nedeni hızlıca belirlemenize yardımcı olur.
- 1
Ayrıntılı çıktıyı etkinleştirin
Tam istek/yanıt döngüsünü görmek için
curl -v URLçalıştırın: DNS çözümlemesi, TCP bağlantısı, TLS el sıkışması, gönderilen istek başlıkları ve alınan yanıt başlıkları. Bu, en kullanışlı hata ayıklama bayrağıdır. - 2
HTTP durum kodunu kontrol edin
Yanıt gövdesi olmadan yalnızca HTTP durum kodunu (200, 404, 500, vb.) almak için
curl -o /dev/null -s -w "%{http_code}" URLçalıştırın. Hızlı sağlık kontrolleri ve betikler için kullanışlıdır. - 3
Hataları sessizce gösterin
İlerleme çubuğunu gizlemek (
-s) ama yine de hataları göstermek (-S) içincurl -sS URLçalıştırın. Temiz çıktı istediğiniz ama hataları yakalamanız gereken betikler için mükemmeldir.
Sıkça Sorulan Sorular
curl çıkış kodunu nasıl kontrol edersiniz?
Bir curl komutunu çalıştırdıktan sonra, çıkış kodu kabuğun özel değişkeninde saklanır. Bash/Zsh'de, curl komutunun hemen ardından echo $? çalıştırın. PowerShell'de $LASTEXITCODE kullanın. Betiklerde, bir koşullu ile kontrol edebilirsiniz: if curl -sf URL; then echo "OK"; else echo "Failed with code $?"; fi. Çıkış kodu 0 başarı anlamına gelir; diğer herhangi bir sayı bir hatayı gösterir. Hem HTTP durum kodunu hem de curl çıkış kodunu görmek için birleştirin: curl -w "%{http_code}" -o /dev/null -s URL; echo "Exit: $?". curl'ün çıkış kodunun HTTP durum kodundan farklı olduğunu unutmayın — --fail bayrağını kullanmadığınız sürece curl, HTTP 404'te bile 0 döndürür.
curl hata 28 (işlem zaman aşımına uğradı) nasıl düzeltilir?
Hata 28, isteğin izin verilen maksimum süreyi aştığı anlamına gelir. Önce zaman aşımını artırın: curl --connect-timeout 30 --max-time 120 URL. --connect-timeout TCP bağlantı aşamasını sınırlarken, --max-time tüm işlemi sınırlar. Ardından, curl -v URL ile darboğazı teşhis edin — ayrıntılı çıktı, curl'ün tam olarak nerede takıldığını gösterir (DNS, bağlantı, TLS veya aktarım). Yaygın düzeltmeler: ağ bağlantınızı ve DNS ayarlarınızı kontrol edin, sunucunun yanıt verdiğini doğrulayın (ping ve telnet), --noproxy '*' ile proxy'leri atlayın ve büyük indirmeler için otomatik yeniden denemeler amacıyla --retry 3 --retry-delay 5 ekleyin.
curl SSL sertifika hataları (hata 60) nasıl düzeltilir?
Hata 60, curl'ün sunucunun SSL sertifikasını doğrulayamadığı anlamına gelir. Düzeltme nedene bağlıdır. Güncel olmayan CA paketi için: https://curl.se/ca/cacert.pem adresinden yeni bir tane indirin ve curl --cacert /path/to/cacert.pem URL kullanın. Docker konteynerleri için: ca-certificates paketini yükleyin (apt-get install ca-certificates). Geliştirme ortamında kendinden imzalı sertifikalar için: doğrulamayı atlamak için curl -k URL kullanın — ancak tüm sertifika kontrolünü devre dışı bıraktığı için -k'yı üretimde asla kullanmayın. Teşhis için: sertifika zincirini incelemek üzere openssl s_client -connect host:443 -showcerts çalıştırın. Sertifikanın süresi dolmuşsa veya ana bilgisayar adı eşleşmiyorsa, sorun sunucu tarafındadır.
curl hata 7 (bağlantı kurulamadı) ne anlama gelir?
Hata 7, curl'ün ana bilgisayar adını bir IP adresine çözümlediği ancak TCP bağlantısı kuramadığı anlamına gelir. Sunucu bağlantıyı aktif olarak reddetti veya bağlantı girişimi ağ düzeyinde zaman aşımına uğradı. Yaygın nedenler: hedef ana bilgisayarda hizmet çalışmıyor (systemctl status veya docker ps ile kontrol edin), güvenlik duvarı portu engelliyor (telnet host port ile test edin), yanlış port kullanıyorsunuz (örneğin 443 yerine 80 veya geliştirme sunucusu için 8080) veya sunucunun dinleme kuyruğu dolu yoğun yük altında. Hata ayıklamak için: curl -v URL kullanın ve çıktıda "Connected to" veya "Connection refused" ifadelerini arayın.