cURL ile Başlangıç: Komut Satırından Güçlü Ağ İşlemleri
İnternet dünyasında veri alışverişi, API’larla iletişim kurma ve sunucularla etkileşimde bulunma, modern yazılım geliştirmenin ve sistem yönetiminin temel taşlarından biridir. Bu işlemlerin komut satırından hızlı ve etkili bir şekilde gerçekleştirilmesini sağlayan güçlü araçlardan biri de cURL’dür. Bu makale, cURL’ü tanımak, kurmak ve temelden ileri seviyeye kadar nasıl kullanacağınızı öğrenmek isteyen herkes için kapsamlı bir rehber niteliğindedir. İster bir geliştirici, ister bir sistem yöneticisi olun, cURL’ün sunduğu esneklik ve güç, günlük iş akışınızı önemli ölçüde kolaylaştıracaktır.
cURL Nedir ve Neden Önemlidir?
cURL, “Client URL” kelimelerinin kısaltmasıdır ve çeşitli protokoller (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, FILE ve daha fazlası) aracılığıyla veri transferi yapmak için kullanılan, açık kaynaklı bir komut satırı aracı ve kütüphanesidir. Genellikle web sunucularından veri almak veya sunuculara veri göndermek için kullanılır.
cURL’ün Tarihçesi ve Amacı
cURL projesi, 1997 yılında Daniel Stenberg tarafından, İsveç’teki bir döviz kuru botu için bir IRC kanalında döviz kurlarını almak amacıyla başlatıldı. Başlangıçta “httpget” adıyla bilinen bu araç, daha sonra FTP desteği eklenerek “urlget” ve nihayetinde daha fazla protokol desteğiyle “cURL” adını aldı. Amacı, ağ üzerinden veri transferini programatik ve komut satırı aracılığıyla kolaylaştırmaktır.
Temel Kullanım Alanları
cURL, web geliştiricileri, API test edenler, sistem yöneticileri ve ağ mühendisleri arasında oldukça popülerdir. Temel kullanım alanları şunlardır:
- Web sayfalarını veya API yanıtlarını çekme.
- RESTful API’larla etkileşim kurma (GET, POST, PUT, DELETE istekleri).
- Dosya indirme ve yükleme.
- HTTP başlıklarını inceleme.
- Kimlik doğrulama gerektiren kaynaklara erişim.
- Proxy sunucuları üzerinden bağlantı kurma.
cURL’ü Diğer Araçlardan Ayıran Özellikler
cURL’ü benzeri diğer araçlardan ayıran en önemli özelliklerden bazıları, desteklediği protokollerin çeşitliliği, esnek komut satırı argümanları, otomasyon yeteneği ve hemen hemen her işletim sisteminde bulunabilir olmasıdır. Ayrıca, libcurl kütüphanesi sayesinde birçok programlama dilinde de kullanılabilmesi, onu geliştiriciler için vazgeçilmez kılar.
cURL Kurulumu ve Temel Kullanım
cURL, modern işletim sistemlerinin çoğunda varsayılan olarak yüklü gelir. Ancak yüklü değilse veya güncel bir sürüme ihtiyacınız varsa kolayca kurabilirsiniz.
İşletim Sistemlerine Göre Kurulum
Linux (Debian/Ubuntu):
sudo apt update
sudo apt install curl
Linux (CentOS/Fedora):
sudo yum install curl
macOS:
macOS'ta cURL genellikle önceden yüklüdür. Eğer değilse veya Homebrew ile yönetmek isterseniz:
brew install curl
Windows:
Windows 10 ve sonrası sürümlerde cURL genellikle mevcuttur. Komut istemcisini açıp curl --version yazarak kontrol edebilirsiniz. Yoksa, resmi cURL web sitesinden (curl.se/windows/) indirebilir veya paket yöneticileri (örn. Chocolatey) ile kurabilirsiniz:
choco install curl
İlk cURL Komutunuz: Bir URL'yi Çekmek
Bir web sayfasının içeriğini komut satırına yazdırmak için en basit cURL komutunu kullanabilirsiniz:
curl https://example.com
Bu komut, https://example.com adresindeki HTML içeriğini terminalinize yazdıracaktır.
Çıktıyı Dosyaya Kaydetme
Çektiğiniz içeriği terminalde görmek yerine bir dosyaya kaydetmek isteyebilirsiniz. Bunun için -o (output) veya -O (remote-name) seçeneklerini kullanırız.
-o(küçük o): Çıktıyı belirli bir dosya adıyla kaydeder.-O(büyük O): Çıktıyı uzak sunucudaki dosya adıyla kaydeder.
curl -o anasayfa.html https://example.com
curl -O https://example.com/image.jpg
cURL Versiyonunu Kontrol Etme
Yüklü cURL sürümünü ve desteklediği protokolleri görmek için:
curl --version
HTTP Metotları ve cURL
cURL, HTTP/HTTPS protokolü üzerinden farklı istek metotlarını (GET, POST, PUT, DELETE vb.) kolayca kullanmanızı sağlar.
GET İstekleri
GET istekleri, bir kaynaktan veri almak için kullanılır ve cURL'ün varsayılan metodudur.
curl https://api.example.com/users
Sorgu parametreleri eklemek için URL'ye doğrudan ekleyebilirsiniz:
curl "https://api.example.com/search?query=curl&limit=10"
POST İstekleri ve Veri Gönderme
POST istekleri, sunucuya veri göndermek (örn. yeni bir kaynak oluşturmak) için kullanılır. Veriyi farklı formatlarda gönderebilirsiniz:
Form verisi (application/x-www-form-urlencoded):
curl -X POST -d "username=john&password=doe" https://api.example.com/login
Burada -X POST metodu belirtir, -d ise veri göndermek için kullanılır.
JSON verisi (application/json):
curl -X POST -H "Content-Type: application/json" -d '{"name": "Alice", "age": 30}' https://api.example.com/users
-H seçeneği ile HTTP başlıkları eklenir.
PUT ve DELETE İstekleri
PUT İstekleri (Kaynak güncelleme):
curl -X PUT -H "Content-Type: application/json" -d '{"name": "Alicia"}' https://api.example.com/users/123
DELETE İstekleri (Kaynak silme):
curl -X DELETE https://api.example.com/users/123
HTTP Başlıklarını Yönetme
HTTP başlıkları, istek ve yanıt hakkında ek bilgiler taşır. cURL ile başlıkları görüntüleyebilir veya kendi başlıklarınızı ekleyebilirsiniz.
Yanıt başlıklarını görmek:
curl -I https://example.com
veya sadece başlıkları değil, tüm yanıtı görmek ve başlıkları da dahil etmek için:
curl -v https://example.com
Özel başlık eklemek:
curl -H "User-Agent: MyCustomApp/1.0" -H "Accept-Language: tr-TR" https://example.com
Kimlik Doğrulama ve Güvenli Bağlantılar
Birçok API ve web kaynağına erişim için kimlik doğrulama gereklidir. cURL bu senaryoları kolayca yönetebilir.
Temel HTTP Kimlik Doğrulama
Kullanıcı adı ve şifre ile temel HTTP kimlik doğrulaması yapmak için -u seçeneğini kullanın:
curl -u "kullaniciadi:sifre" https://api.example.com/private
Şifreyi interaktif olarak girmek isterseniz sadece kullanıcı adını belirtip şifreyi boş bırakabilirsiniz:
curl -u "kullaniciadi:" https://api.example.com/private
Bearer Token ile Kimlik Doğrulama
Modern API'lar genellikle OAuth 2.0 gibi protokollerle Bearer Token kullanır. Bu token'ı bir HTTP başlığı olarak göndermeniz gerekir:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/data
SSL/TLS ve Sertifika Yönetimi
cURL, HTTPS bağlantılarını varsayılan olarak doğrular. Ancak bazen kendinden imzalı sertifikalarla veya belirli CA'larla çalışmanız gerekebilir.
- Sertifika doğrulamasını devre dışı bırakma (güvenli değil, sadece test amaçlı):
curl -k https://self-signed.example.com
curl --cacert mycert.pem https://secure.example.com
İleri Düzey cURL Kullanımları
cURL'ün yetenekleri, sadece temel isteklerle sınırlı değildir. Çerez yönetimi, proxy kullanımı ve daha birçok gelişmiş özelliği bulunur.
Çerez Yönetimi
Web siteleri genellikle kullanıcı oturumlarını izlemek için çerezler kullanır. cURL ile çerezleri alabilir ve gönderebilirsiniz.
Çerezleri bir dosyaya kaydetme:
curl -c cookies.txt https://example.com/login
Kaydedilmiş çerezleri bir sonraki istekte kullanma:
curl -b cookies.txt https://example.com/profile
-c (cookie-jar) çerezleri kaydeder, -b (cookie) ise çerezleri gönderir.
Proxy Kullanımı
Bir proxy sunucusu üzerinden istek göndermek için --proxy seçeneğini kullanabilirsiniz:
curl --proxy http://proxy.example.com:8080 https://example.com
Proxy kimlik doğrulaması gerekiyorsa:
curl --proxy http://proxy.example.com:8080 --proxy-user "proxyuser:proxypass" https://example.com
Yönlendirmeleri Takip Etme
Birçok web sitesi, istekleri başka bir URL'ye yönlendirir (örneğin HTTP'den HTTPS'ye). cURL varsayılan olarak yönlendirmeleri takip etmez. --location veya -L seçeneği ile yönlendirmeleri takip etmesini sağlayabilirsiniz:
curl -L http://example.com
İlerleme Göstergesi ve Zaman Aşımı
Büyük dosyaları indirirken veya yavaş bağlantılarda ilerleme durumunu görmek isteyebilirsiniz. --progress-bar veya --no-progress-bar ile kontrol edebilirsiniz.
curl --progress-bar -O https://speed.hetzner.de/100MB.bin
Zaman aşımı (timeout) belirlemek için --connect-timeout (bağlantı kurma süresi) ve --max-time (tüm işlem süresi) seçeneklerini kullanın:
curl --connect-timeout 5 --max-time 10 https://slow-api.example.com
cURL ile Sık Karşılaşılan Sorunlar ve Çözümleri
cURL kullanırken bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bunlardan bazıları ve çözümleri.
Bağlantı Hataları
- "Could not resolve host": URL'yi doğru yazdığınızdan ve DNS sunucularınızın çalıştığından emin olun.
- "Connection refused": Hedef sunucunun çalıştığından, doğru portu kullandığınızdan ve güvenlik duvarı tarafından engellenmediğinden emin olun.
- "Operation timed out": Sunucunun yanıt vermesi çok uzun sürdü. Ağ bağlantınızı veya sunucunun durumunu kontrol edin.
--max-timeseçeneği ile zaman aşımı süresini artırabilirsiniz.
Sertifika Hataları
- "SSL certificate problem: self-signed certificate in certificate chain": Hedef sunucu kendinden imzalı bir sertifika kullanıyor olabilir. Eğer güvenli bir ortamda test yapıyorsanız
-kveya--insecureseçeneğini kullanabilirsiniz (üretim ortamlarında önerilmez!). - "SSL certificate problem: unable to get local issuer certificate": cURL'ün sisteminizdeki CA sertifikalarına erişimde sorunu olabilir.
--cacertile doğru sertifika dosyasını belirtmeniz gerekebilir.
Veri Gönderme Sorunları
- "Unsupported content-type": API'nın beklediği
Content-Typebaşlığını doğru bir şekilde ayarladığınızdan emin olun (-H "Content-Type: application/json"gibi). - Yanlış formatta veri: Gönderdiğiniz verinin (JSON, form verisi vb.) API'nın beklediği formatla eşleştiğinden emin olun.
Sonuç
cURL, komut satırından ağ işlemleri yapmak için inanılmaz derecede güçlü ve esnek bir araçtır. Bu makalede, cURL'ün temel kurulumundan HTTP metotlarını kullanmaya, kimlik doğrulamadan ileri düzey çerez ve proxy yönetimine kadar birçok yönünü ele aldık. Edindiğiniz bu bilgilerle, API'larla etkileşim kurabilir, web sayfalarını çekebilir ve ağ üzerinden veri transferini otomatikleştirebilirsiniz. cURL'ün sunduğu geniş seçenek yelpazesi, onu her geliştirici ve sistem yöneticisinin araç kutusunda bulunması gereken vazgeçilmez bir yardımcı yapar.
SSS (Sık Sorulan Sorular)
cURL sadece HTTP için mi kullanılır?
Hayır, cURL HTTP ve HTTPS'in yanı sıra FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, FILE gibi birçok farklı protokolü destekler.
cURL yerine başka hangi araçları kullanabilirim?
Web istekleri için wget (daha çok indirme odaklıdır), httpie (daha kullanıcı dostu bir CLI arayüzü sunar) veya programlama dillerinin kendi kütüphaneleri (Python'da requests, Node.js'te axios gibi) kullanılabilir. Ancak cURL, protokol desteği ve esneklik açısından genellikle en kapsamlı seçenektir.
cURL ile dosya yükleme veya indirme yapabilir miyim?
Evet, cURL ile kolayca dosya indirebilirsiniz (-O veya -o seçenekleriyle). Dosya yüklemek için ise -F (form-data) seçeneğini kullanabilirsiniz:
curl -F "file=@/path/to/your/file.txt" https://api.example.com/upload
cURL komutlarını programlama dillerinde nasıl kullanırım?
cURL'ün temelini oluşturan libcurl kütüphanesi, C, Python, PHP, Java, Ruby ve diğer birçok dilde bağlayıcılara (bindings) sahiptir. Bu sayede, cURL'ün sunduğu tüm yetenekleri kendi uygulamalarınız içinde kullanabilirsiniz. Örneğin, Python'da pycurl veya requests kütüphanesi, libcurl'ün veya benzer işlevselliğin bir soyutlamasını sunar.