PHP cURL javobi qisqartirilganmi?
Yuklab olingan hajmni Content-Length bilan solishtirishdan oldin cURL uzatish natijasini, javob holatini va tanani ifodalashni tekshiring.
Proksi orqali yuklab olingan sahifa to‘liq bo‘lmagandek ko‘rinsa, cURL natijasidan boshlang. Qisqa javob, muvaffaqiyatsiz uzatish va to‘liq bloklash sahifasi turli tushuntirishlarni talab qiladi.
Mavjud sozlangan handle’da CURLOPT_RETURNTRANSFER yoqilgan bo‘lsa:
$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);
Bu qiymatlarni handle’ni bo‘shatishdan oldin to‘plang. Qat’iy taqqoslash uzatish muvaffaqiyatsizligini bo‘sh satr yoki “0” kabi muvaffaqiyatli tanalardan ajratadi. HTTP xato holatlari avtomatik curl_exec xatosi emas, shuning uchun holatni ham izohlang.
Yuklab olingan baytlar hisoblagichi sarlavhalarni o‘z ichiga olmaydi. E’lon qilingan qiymat Content-Length’dan keladi va hajm noma’lum bo‘lsa -1 bo‘ladi. Javob Content-Length’ni qonuniy ravishda tashlab ketishi mumkin; noma’lum qiymat qisqartirilgan fayl tashxisi emas.
Kontentni avtomatik dekodlash yana bir farqni kiritadi. Content-Length odatda siqilgan tasvirni tavsiflaydi, PHP satrida esa ochilgan baytlar bo‘lishi mumkin. strlen($body) ni o‘sha sarlavha bilan taqqoslash turli tasvirlarni taqqoslashdir.
Uzatish kutilgan hajmni buzsa, cURL CURLE_PARTIAL_FILE haqida xabar berishi mumkin. Bo‘sh bo‘lmagan har qanday chiqishni muvaffaqiyat deb hisoblash o‘rniga o‘sha xatoni saqlang. Aksincha, kichik 200 javobi bilan muvaffaqiyatli uzatish manba yoki proksi qaytarishni tanlagan butun sahifa bo‘lishi mumkin.
Nihoyat kerakli kontentni tekshiring. cURL olib kelgan HTML sahifani to‘ldirish uchun JavaScript ishga tushirmaydi. Brauzer ko‘rsatadigan bo‘limlar har bir uzatilgan bayt yetib kelgan bo‘lsa ham asl javobda bo‘lmasligi mumkin.