Дали одговорот на PHP cURL е скратен?
Проверете го резултатот од преносот на cURL, статусот на одговорот и претставувањето на телото пред да ја споредите преземената големина со Content-Length.
Започнете со резултатот на cURL кога страница преземена преку прокси изгледа нецелосна. Краткиот одговор, неуспешниот пренос и целосната страница за блокирање бараат различни објаснувања.
Со овозможен CURLOPT_RETURNTRANSFER на постоечкиот конфигуриран handle:
$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 за да ја пополни страницата. Деловите што ги прикажува прелистувачот може да отсуствуваат од првичниот одговор дури и кога пристигнал секој пренесен бајт.