Почните са резултатом 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 да попуни страницу. Делови које прегледач приказује могу изостати из изворног одговора чак и када је сваки пренесени бајт стигао.

Повезани чланци