Proxy üzerinden indirilen bir sayfa eksik göründüğünde cURL sonucuyla başlayın. Kısa yanıt, başarısız aktarım ve tam engelleme sayfası farklı açıklamalar gerektirir.

Mevcut yapılandırılmış handle üzerinde CURLOPT_RETURNTRANSFER etkinken:

$body = curl_exec($ch);
if ($body === false) {
    throw new RuntimeException(curl_error($ch), curl_errno($ch));
}

$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$downloaded = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD_T);
$declared = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T);

Handle’ı serbest bırakmadan önce bu değerleri toplayın. Katı karşılaştırma, aktarım hatasını boş dize veya “0” gibi başarılı gövdelerden ayırır. HTTP hata durumları otomatik olarak curl_exec hatası değildir, bu yüzden durumu da yorumlayın.

İndirilen bayt sayacı başlıkları içermez. Bildirilen değer Content-Length’ten gelir ve boyut bilinmediğinde -1 olur. Bir yanıt Content-Length’i meşru olarak atlayabilir; bilinmeyen değer kesilmiş dosya tanısı değildir.

Otomatik içerik çözme bir ayrım daha getirir. Content-Length genellikle sıkıştırılmış gösterimi tanımlar, oysa PHP dizesi açılmış baytlar içerebilir. strlen($body) değerini o başlıkla karşılaştırmak farklı gösterimleri karşılaştırmak olur.

cURL, aktarım beklenen boyutu ihlal ettiğinde CURLE_PARTIAL_FILE bildirebilir. Boş olmayan her çıktıyı başarı saymak yerine bu hatayı koruyun. Tersine, küçük bir 200 yanıtıyla başarılı bir aktarım, kaynağın veya proxy’nin döndürmeyi seçtiği sayfanın tamamı olabilir.

Son olarak gereken içeriği denetleyin. cURL’ün getirdiği HTML, sayfayı doldurmak için JavaScript çalıştırmaz. Tarayıcının gösterdiği bölümler, iletilen her bayt ulaşsa bile özgün yanıtta bulunmayabilir.

İlgili makaleler