Begin bij het resultaat van cURL wanneer een via een proxy gedownloade pagina onvolledig lijkt. Een kort antwoord, een mislukte overdracht en een volledige blokkeerpagina vragen om verschillende verklaringen.

Met CURLOPT_RETURNTRANSFER ingeschakeld op de bestaande geconfigureerde 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);

Verzamel deze waarden voordat u de handle vrijgeeft. De strikte vergelijking onderscheidt een overdrachtsfout van geslaagde bodies zoals een lege tekenreeks of “0”. HTTP-foutstatussen zijn niet automatisch curl_exec-fouten, dus interpreteer ook de status.

De teller voor gedownloade gegevens sluit headers uit. De gedeclareerde waarde komt uit Content-Length en is -1 wanneer die grootte onbekend is. Een antwoord mag Content-Length terecht weglaten; een onbekende waarde is geen diagnose van een afgekapt bestand.

Automatische inhoudsdecodering voegt nog een onderscheid toe. Content-Length beschrijft meestal de gecomprimeerde representatie, terwijl de PHP-string gedecomprimeerde bytes kan bevatten. strlen($body) met die header vergelijken vergelijkt dan verschillende representaties.

cURL kan CURLE_PARTIAL_FILE melden wanneer de overdracht een verwachte grootte schendt. Bewaar die fout in plaats van elke niet-lege uitvoer als succes te behandelen. Omgekeerd kan een geslaagde overdracht met een klein 200-antwoord de hele pagina zijn die de oorsprong of de proxy wilde teruggeven.

Ten slotte controleer de vereiste inhoud. HTML die cURL ophaalt, voert geen JavaScript uit om de pagina te vullen. Secties die de browser toont, kunnen in het oorspronkelijke antwoord ontbreken, zelfs wanneer elke verzonden byte is aangekomen.

Gerelateerde artikelen