Пачніце з выніку 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 можа быць усёй старонкай, якую крыніца або проксі вырашылі вярнуць.

Нарэшце праверце патрэбнае змесціва. HTML, атрыманы cURL, не выконвае JavaScript для запаўнення старонкі. Адсутныя раздзелы, якія паказвае браўзер, могуць не быць у першапачатковым адказе, нават калі кожны перададзены байт прыйшоў.

Падобныя артыкулы