Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

PHP cURL nedir?​


PHP cURL, PHP uygulamasının HTTP ve HTTPS gibi ağ protokolleri üzerinden başka sunuculara istek göndermesini ve yanıt almasını sağlayan cURL uzantısıdır. Bir API’den veri çekmek, uzak bir servise POST isteği göndermek, kimlik doğrulamalı bir endpoint’e bağlanmak veya bir URL’nin HTTP durumunu kontrol etmek için kullanılır. PHP tarafındaki işlevler, arka planda libcurl kütüphanesinin yeteneklerini kullanır.

cURL bir tarayıcı değildir; aldığı HTML, JSON veya metin yanıtını kendiliğinden ekranda anlamlandırmaz. Yanıtı PHP kodunuzda alıp JSON ise json_decode() ile dizi veya nesneye dönüştürmeniz, HTML ise ihtiyacınıza göre işlemeniz gerekir.

En küçük çalışan GET örneği​


Aşağıdaki CLI örneği PHP 8 ve etkin cURL uzantısı içindir. Sabit example.com adresine GET isteği gönderir, yanıt gövdesini alır ve HTTP durum kodunu kontrol eder:

Kod:
<?php

$url = 'https://example.com/';
$ch = curl_init($url);
if ($ch === false) {
    throw new RuntimeException('cURL başlatılamadı');
}

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 10,
    CURLOPT_FOLLOWLOCATION => false,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($response === false) {
    echo 'cURL hatası: ' . curl_error($ch) . PHP_EOL;
    exit(1);
}


echo 'HTTP durum kodu: ' . $httpCode . PHP_EOL;
echo 'Yanıt uzunluğu: ' . strlen($response) . PHP_EOL;

Çalıştırma ve sonucu yorumlama​


  1. Kodun bulunduğu dosyayı örneğin curl-test.php adıyla kaydedin.
  2. PHP’nin cURL uzantısının etkin olduğu bir ortamda dosyayı çalıştırın.
  3. php curl-test.php komutuyla çalıştırın. Başarılı bağlantıda HTTP durum kodunu ve sıfırdan büyük olabilen yanıt uzunluğunu görün.
  4. Bir API çağrısı yapıyorsanız önce HTTP durum kodunu, sonra yanıt gövdesinin beklediğiniz JSON veya metin biçiminde olup olmadığını kontrol edin.

Başarı çıktısı, sunucudan teknik olarak bir yanıt alındığını gösterir; yanıtın uygulama açısından doğru olduğu anlamına gelmez. Örneğin 404 veya 500 gibi bir HTTP yanıtı da curl_exec() tarafından metin olarak dönebilir. Bu nedenle yalnızca $response !== false kontrolü yeterli değildir; $httpCode değerini de yorumlamalısınız. Bağlantı kurulamazsa DNS, TLS, zaman aşımı veya uzaktaki sunucu kaynaklı hata hakkında curl_error() açıklama verir.

cURL ne zaman tercih edilir?​


Basit bir uzak dosya okuma işleminde PHP’nin akış işlevleri yeterli olabilir. Ancak istek yöntemi, başlık, zaman aşımı, yönlendirme, kimlik doğrulama, gövde verisi ve hata ayrımı üzerinde kontrol gerektiğinde cURL daha uygundur.

İhtiyaçUygun yaklaşımNeden
Basit bir metin veya dosya okumaAkış işlevleriDaha kısa yapı yeterli olabilir
API’ye JSON göndermecURLPOST yöntemi, başlık ve gövde denetlenebilir
Zaman aşımı ve HTTP kodu kontrolücURLAğ hatası ile HTTP yanıtı ayrıştırılabilir

API çağrısında temel kararlar​


Bir API’ye istek gönderirken isteğin yöntemini doğru seçin: veri okumada genellikle GET, yeni veri göndermede POST, mevcut kaynağı değiştirmede PUT veya PATCH kullanılır. JSON gönderiyorsanız gövdeyi json_encode() ile oluşturup Content-Type: application/json başlığını ekleyin. Yanıt JSON bekleniyorsa json_decode($response, true) sonucunun null olabileceğini ve JSON hata durumunu ayrıca kontrol edin.

CURLOPT_TIMEOUT gibi toplam zaman aşımı belirlemek, uzak sunucu yanıt vermediğinde PHP işleminin gereksiz yere beklemesini önler. Örnekte yönlendirme takibi kapalıdır; 3xx yanıtında hedefi ayrıca denetleyin. Gerçek uygulamada kullanıcıdan gelen sınırsız URL’leri veya güvenilmeyen yönlendirme hedeflerini sunucudan çağırmayın; izinli hedefleri sınırlandırın. TLS doğrulamasını bağlantı hatasını gizlemek için kapatmayın. Hassas bilgileri URL sorgu parametresine veya hata çıktısına koymayın; kimlik doğrulama başlıklarını ve erişim anahtarlarını uygulamanın yapılandırmasından okuyun.

Sık yapılan hatalar​


  • CURLOPT_RETURNTRANSFER ayarlamamak: Yanıtı değişkende almak yerine doğrudan çıktıya yazdırılabilir. API yanıtını işlemek istiyorsanız bu seçenek true olmalıdır.
  • HTTP hata kodunu bağlantı hatası sanmak: cURL’nin teknik olarak yanıt alması, sunucunun isteği başarılı kabul ettiği anlamına gelmez. HTTP durum kodunu ayrıca değerlendirin.
  • Sonsuz veya uzun bekleme bırakmak: Uygulamanın kullanımına uygun bir bağlantı ve toplam zaman aşımı belirleyin.
  • Yanıt biçimini varsaymak: JSON beklenen çağrıda içerik türünü, JSON çözümleme sonucunu ve API’nin hata alanlarını kontrol edin.

Sık sorulan sorular​


PHP cURL ile tarayıcıdaki sayfayı birebir alabilir miyim?​


Sunucunun cURL istemcilerine sunduğu yanıtı alabilirsiniz; ancak tarayıcıda çalışan JavaScript’in oluşturduğu son içerik kendiliğinden çalıştırılmaz. Böyle bir durumda ilgili API endpoint’ini kullanmak veya JavaScript çalıştırabilen ayrı bir araç değerlendirmek gerekir.

cURL yanıtı neden boştur?​


CURLOPT_RETURNTRANSFER etkin olmayabilir, uzak sunucu boş gövde döndürüyor olabilir veya istek bir yönlendirme ya da hata nedeniyle beklediğiniz içeriği almamış olabilir. Önce curl_exec() sonucunu, curl_error() değerini, HTTP durum kodunu ve yönlendirme ayarını birlikte inceleyin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic