Naputol ba ang tugon ng cURL sa PHP?
Suriin ang resulta ng paglilipat ng cURL, ang katayuan ng tugon at ang representasyon ng katawan bago ihambing ang na-download na sukat sa Content-Length.
Magsimula sa resulta ng cURL kapag ang pahinang na-download sa pamamagitan ng proxy ay mukhang hindi kumpleto. Ang maikling tugon, nabigong paglilipat at kumpletong page ng pagharang ay nangangailangan ng magkakaibang paliwanag.
Kapag naka-enable ang CURLOPT_RETURNTRANSFER sa umiiral nang naka-configure na 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);
Tipunin ang mga halagang ito bago pakawalan ang handle. Ang mahigpit na paghahambing ay naghihiwalay ng kabiguan sa paglilipat mula sa matagumpay na katawan tulad ng walang laman na string o “0”. Ang mga status ng error sa HTTP ay hindi awtomatikong kabiguan ng curl_exec, kaya bigyang-kahulugan din ang status.
Hindi kasama ng counter ng na-download ang mga header. Ang idineklarang halaga ay nagmumula sa Content-Length at -1 kapag hindi alam ang sukat. Maaaring legal na alisin ng tugon ang Content-Length; ang hindi kilalang halaga ay hindi diagnosis ng naputol na file.
Ang awtomatikong pag-decode ng nilalaman ay nagdadagdag ng isa pang pagkakaiba. Karaniwang inilalarawan ng Content-Length ang naka-compress na representasyon, habang ang string ng PHP ay maaaring may mga decompressed na byte. Ang paghahambing ng strlen($body) sa header na iyon ay naghahambing ng magkaibang representasyon.
Maaaring iulat ng cURL ang CURLE_PARTIAL_FILE kapag nilalabag ng paglilipat ang inaasahang sukat. Itago ang error na iyon sa halip na ituring na tagumpay ang anumang hindi walang laman na output. Sa kabaligtaran, ang matagumpay na paglilipat na may maliit na tugon na 200 ay maaaring ang buong pahina na pinili ng pinagmulan o proxy na ibalik.
Sa huli suriin ang kinakailangang nilalaman. Ang HTML na nakuha ng cURL ay hindi nagpapatupad ng JavaScript upang punan ang pahina. Ang mga seksyong ipinapakita ng browser ay maaaring wala sa orihinal na tugon kahit dumating ang bawat byte na ipinadala.