Kas PHP cURL-i vastus kärbiti?
Kontrollige cURL-i ülekande tulemust, vastuse olekut ja keha esitust enne, kui võrdlete allalaaditud suurust väärtusega Content-Length.
Alustage cURL-i tulemusest, kui puhverserveri kaudu alla laaditud leht tundub puudulik. Lühike vastus, ebaõnnestunud ülekanne ja täielik blokeerimisleht vajavad erinevaid selgitusi.
Kui olemasoleval seadistatud handle’il on lubatud 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);
Koguge need väärtused enne handle’i vabastamist. Range võrdlus eristab ülekande ebaõnnestumist edukast kehast, näiteks tühjast stringist või väärtusest “0”. HTTP-vea olekud ei ole automaatselt curl_exec-i ebaõnnestumised, seega tõlgendage ka olekut.
Allalaaditud baitide loendur ei hõlma päiseid. Deklareeritud väärtus pärineb Content-Length-ist ja on -1, kui suurus on teadmata. Vastus võib Content-Length-i õiguspäraselt välja jätta; teadmata väärtus ei ole kärbitud faili diagnoos.
Automaatne sisu dekodeerimine lisab veel ühe eristuse. Content-Length kirjeldab tavaliselt tihendatud esitust, samas kui PHP string võib sisaldada lahti pakitud baite. strlen($body) võrdlemine selle päisega võrdleb siis erinevaid esitusi.
cURL võib teatada CURLE_PARTIAL_FILE, kui ülekanne rikub eeldatud suurust. Säilitage see viga, selle asemel et pidada mis tahes mittetühja väljundit õnnestumiseks. Vastupidi, edukas ülekanne väikese 200 vastusega võib olla kogu leht, mille allikas või puhverserver otsustas tagastada.
Lõpuks kontrollige vajalikku sisu. cURL-i hangitud HTML ei käivita JavaScripti lehe täitmiseks. Brauseris kuvatavad jaotised võivad algses vastuses puududa ka siis, kui iga edastatud bait kohale jõudis.