เริ่มจากผลลัพธ์ของ cURL เมื่อหน้าที่ดาวน์โหลดผ่านพร็อกซีดูไม่สมบูรณ์ การตอบกลับสั้น การถ่ายโอนที่ล้มเหลว และหน้าบล็อกเต็มรูปแบบต้องใช้คำอธิบายที่ต่างกัน

เมื่อเปิดใช้ CURLOPT_RETURNTRANSFER บน handle ที่กำหนดค่าไว้แล้ว:

$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 การเปรียบเทียบแบบเข้มงวดแยกความล้มเหลวในการถ่ายโอนออกจากเนื้อหาที่สำเร็จ เช่น สตริงว่างหรือ “0” สถานะข้อผิดพลาด HTTP ไม่ใช่ความล้มเหลวของ curl_exec โดยอัตโนมัติ จึงต้องตีความสถานะด้วย

ตัวนับข้อมูลที่ดาวน์โหลดไม่รวมส่วนหัว ค่าที่ประกาศมาจาก Content-Length และเป็น -1 เมื่อไม่ทราบขนาด การตอบกลับสามารถละเว้น Content-Length ได้อย่างถูกต้อง ค่าที่ไม่ทราบไม่ใช่การวินิจฉัยว่าไฟล์ถูกตัด

การถอดรหัสเนื้อหาอัตโนมัติเพิ่มความแตกต่างอีกอย่าง Content-Length มักอธิบายการแทนข้อมูลที่บีบอัด ขณะที่สตริง PHP อาจมีไบต์ที่คลายการบีบอัดแล้ว การเปรียบเทียบ strlen($body) กับส่วนหัวนั้นจึงเป็นการเปรียบเทียบการแทนข้อมูลที่ต่างกัน

cURL อาจรายงาน CURLE_PARTIAL_FILE เมื่อการถ่ายโอนละเมิดขนาดที่คาดไว้ ให้เก็บข้อผิดพลาดนั้นไว้แทนการถือว่าเอาต์พุตที่ไม่ว่างเป็นความสำเร็จ ในทางกลับกัน การถ่ายโอนที่สำเร็จด้วยการตอบกลับ 200 ขนาดเล็กอาจเป็นทั้งหน้าที่ต้นทางหรือพร็อกซีเลือกส่งกลับมา

สุดท้าย ตรวจสอบเนื้อหาที่ต้องการ HTML ที่ cURL ดึงมาไม่รัน JavaScript เพื่อเติมหน้า ส่วนที่เบราว์เซอร์แสดงอาจไม่มีอยู่ในคำตอบต้นฉบับ แม้ว่าทุกไบต์ที่ส่งไปมาถึงแล้ว

บทความที่เกี่ยวข้อง