Започнете с резултата от 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, за да запълни страницата. Липсващите секции, които браузърът показва, може да отсъстват от първоначалния отговор, дори когато всеки предаден байт е пристигнал.

Подобни статии