Lecsonkolt a PHP cURL válasza?
Ellenőrizze a cURL átviteli eredményét, a válasz állapotát és a törzs reprezentációját, mielőtt a letöltött méretet a Content-Length fejléchez hasonlítaná.
Kezdje a cURL eredményével, amikor egy proxyn keresztül letöltött oldal hiányosnak tűnik. A rövid válasz, a sikertelen átvitel és a teljes blokkoló oldal különböző magyarázatot igényel.
Ha a meglévő, beállított handle-en engedélyezett a 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);
Gyűjtse össze ezeket az értékeket, mielőtt felszabadítja a handle-t. A szigorú összehasonlítás megkülönbözteti az átviteli hibát a sikeres törzsektől, például az üres sztringtől vagy a “0” értéktől. A HTTP-hibaállapotok nem automatikusan curl_exec-hibák, ezért az állapotot is értelmezni kell.
A letöltött bájtok számlálója nem tartalmazza a fejléceket. A deklarált érték a Content-Length fejlécből származik, és -1, ha a méret ismeretlen. Egy válasz jogszerűen elhagyhatja a Content-Length fejlécet; az ismeretlen érték nem a csonkolt fájl diagnózisa.
A tartalom automatikus dekódolása újabb különbséget hoz. A Content-Length általában a tömörített reprezentációt írja le, míg a PHP-sztring kicsomagolt bájtokat tartalmazhat. A strlen($body) és a fejléc összehasonlítása ilyenkor különböző reprezentációkat hasonlít össze.
A cURL CURLE_PARTIAL_FILE hibát jelezhet, ha az átvitel megsérti a várt méretet. Őrizze meg ezt a hibát, ahelyett hogy bármilyen nem üres kimenetet sikernek tekintene. Fordítva, egy sikeres átvitel kis 200-as válasszal lehet a teljes oldal, amelyet az eredet vagy a proxy visszaadni döntött.
Végül ellenőrizze a szükséges tartalmat. A cURL által letöltött HTML nem futtat JavaScriptet az oldal feltöltéséhez. Előfordulhat, hogy a böngésző által megjelenített szakaszok hiányoznak az eredeti válaszból, még akkor is, ha minden átvitt bájt megérkezett.