Vai PHP cURL atbilde tika saīsināta?
Pārbaudiet cURL pārsūtīšanas rezultātu, atbildes statusu un pamatteksta attēlojumu pirms lejupielādētā izmēra salīdzināšanas ar Content-Length.
Sāciet ar cURL rezultātu, kad caur starpniekserveri lejupielādēta lapa šķiet nepilnīga. Īsai atbildei, neizdevušās pārsūtīšanai un pilnai bloķēšanas lapai vajadzīgi atšķirīgi skaidrojumi.
Kad esošajā konfigurētajā handle ir iespējots 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);
Savāciet šīs vērtības pirms handle atbrīvošanas. Stingrais salīdzinājums atšķir pārsūtīšanas kļūmi no veiksmīga pamatteksta, piemēram, tukšas virknes vai “0”. HTTP kļūdu statusi nav automātiski curl_exec kļūmes, tāpēc interpretējiet arī statusu.
Lejupielādēto baitu skaitītājs neietver galvenes. Deklarētā vērtība nāk no Content-Length un ir -1, ja izmērs nav zināms. Atbilde var likumīgi izlaist Content-Length; nezināma vērtība nav saīsinātas datnes diagnoze.
Automātiskā satura atkodēšana pievieno vēl vienu atšķirību. Content-Length parasti apraksta saspiesto attēlojumu, bet PHP virknē var būt izspiesti baiti. Salīdzinot strlen($body) ar šo galveni, tiek salīdzināti dažādi attēlojumi.
cURL var ziņot CURLE_PARTIAL_FILE, kad pārsūtīšana pārkāpj gaidīto izmēru. Saglabājiet šo kļūdu, nevis uzskatiet jebkuru ne tukšu izvadi par panākumu. Pretēji, veiksmīga pārsūtīšana ar mazu 200 atbildi var būt visa lapa, ko avots vai starpniekserveris izvēlējās atgriezt.
Visbeidzot pārbaudiet nepieciešamo saturu. cURL iegūtais HTML neizpilda JavaScript, lai aizpildītu lapu. Pārlūkā redzamās sadaļas var trūkt sākotnējā atbildē, pat ja katrs pārsūtītais baits ir ieradies.