A gafodd ymateb cURL PHP ei dorri?
Gwiriwch ganlyniad trosglwyddo cURL, statws yr ymateb a chynrychioliad y corff cyn cymharu’r maint a lawrlwythwyd ag Content-Length.
Dechreuwch gyda chanlyniad cURL pan fo tudalen a lawrlwythwyd drwy brocsi yn edrych yn anghyflawn. Mae angen esboniadau gwahanol ar ymateb byr, trosglwyddiad wedi methu a thudalen rwystro gyflawn.
Gyda CURLOPT_RETURNTRANSFER wedi’i alluogi ar y handle sydd eisoes wedi’i ffurfweddu:
$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);
Casglwch y gwerthoedd hyn cyn rhyddhau’r handle. Mae’r gymhariaeth lem yn gwahaniaethu methiant trosglwyddo oddi wrth gorff llwyddiannus fel llinyn gwag neu “0”. Nid yw statysau gwall HTTP yn fethiannau curl_exec yn awtomatig, felly dehonglwch y statws hefyd.
Nid yw’r cyfrifydd a lawrlwythwyd yn cynnwys penawdau. Daw’r gwerth a ddatganwyd o Content-Length ac mae’n -1 pan fo’r maint hwnnw’n anhysbys. Gall ymateb hepgor Content-Length yn gyfreithlon; nid yw gwerth anhysbys yn ddiagnosis o ffeil wedi’i thorri.
Mae dadgodio cynnwys awtomatig yn cyflwyno gwahaniaeth arall. Mae Content-Length fel arfer yn disgrifio’r gynrychiolaeth gywasgedig, tra gall y llinyn PHP gynnwys beitiau wedi’u dadgywasgu. Mae cymharu strlen($body) â’r pennawd hwnnw wedyn yn cymharu cynrychioliadau gwahanol.
Gall cURL adrodd CURLE_PARTIAL_FILE pan fo’r trosglwyddiad yn torri maint disgwyliedig. Cadwch y gwall hwnnw yn lle trin unrhyw allbwn anwag yn llwyddiant. I’r gwrthwyneb, gall trosglwyddiad llwyddiannus ag ymateb 200 bach fod yr holl dudalen y dewisodd y tarddiad neu’r procsi ei dychwelyd.
Yn olaf gwiriwch y cynnwys gofynnol. Nid yw HTML a gafwyd gan cURL yn gweithredu JavaScript i lenwi’r dudalen. Gall adrannau sydd ar goll yn y porwr fod yn absennol o’r ymateb gwreiddiol hyd yn oed pan gyrhaeddodd pob beit a drosglwyddwyd.