PHP cURL жауабы қысқартылды ма?
Жүктелген өлшемді Content-Length-пен салыстырмас бұрын cURL тасымалының нәтижесін, жауап күйін және дененің көрінісін тексеріңіз.
Прокси арқылы жүктелген бет толық емес көрінсе, cURL нәтижесінен бастаңыз. Қысқа жауап, сәтсіз тасымал және толық блоктау беті әртүрлі түсіндіруді қажет етеді.
Бар handle-де 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);
Осы мәндерді handle-ді босатпас бұрын жинаңыз. Қатаң салыстыру тасымал сәтсіздігін бос жол немесе “0” сияқты сәтті денелерден ажыратады. HTTP қате күйлері автоматты түрде curl_exec сәтсіздігі емес, сондықтан күйді де түсіндіріңіз.
Жүктелген байт санағышы тақырыптарды қамтымайды. Жарияланған мән Content-Length-тен келеді және өлшем белгісіз болғанда -1 болады. Жауап Content-Length-ті заңды түрде өткізіп жіберуі мүмкін; белгісіз мән қысқартылған файл диагнозы емес.
Мазмұнды автоматты декодтау тағы бір айырмашылық қосады. Content-Length әдетте сығылған көріністі сипаттайды, ал PHP жолы ашылған байттарды қамтуы мүмкін. strlen($body)-ді сол тақырыппен салыстыру әртүрлі көріністерді салыстыру болып табылады.
Тасымал күтілетін өлшемді бұзса, cURL CURLE_PARTIAL_FILE хабарлауы мүмкін. Кез келген бос емес шығысты сәттілік деп санаудың орнына сол қатені сақтаңыз. Керісінше, шағын 200 жауабы бар сәтті тасымал бастапқы дереккөз немесе прокси қайтаруды таңдаған толық бет болуы мүмкін.
Соңында қажетті мазмұнды тексеріңіз. cURL әкелген HTML бетті толтыру үшін JavaScript орындамайды. Браузер көрсететін бөлімдер әрбір жіберілген байт келгенімен де бастапқы жауапта болмауы мүмкін.