जब प्रॉक्सी से डाउनलोड किया गया पृष्ठ अधूरा लगे तो cURL के परिणाम से शुरू करें। छोटी प्रतिक्रिया, असफल स्थानांतरण और पूर्ण ब्लॉक पृष्ठ के लिए अलग-अलग व्याख्याएँ चाहिए।

मौजूदा कॉन्फ़िगर किए गए handle पर CURLOPT_RETURNTRANSFER सक्षम होने पर:

$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 प्रतिक्रिया वाला सफल स्थानांतरण वह पूरा पृष्ठ हो सकता है जिसे मूल स्रोत या प्रॉक्सी ने लौटाने का चयन किया।

अंत में आवश्यक सामग्री जाँचें। cURL द्वारा लाया गया HTML पृष्ठ भरने के लिए JavaScript नहीं चलाता। ब्राउज़र जो अनुभाग दिखाता है, वे भेजे गए हर बाइट के पहुँचने पर भी मूल प्रतिक्रिया में अनुपस्थित हो सकते हैं।

संबंधित लेख