प्रॉक्सीद्वारे डाउनलोड केलेले पृष्ठ अपूर्ण दिसत असेल तेव्हा 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 चालवत नाही. ब्राउझर दाखवतो ते विभाग पाठवलेला प्रत्येक बाइट पोहोचला तरी मूळ प्रतिसादात नसू शकतात.

संबंधित लेख