Start med resultatet til cURL når en side lastet ned via en proxy ser ufullstendig ut. Et kort svar, en mislykket overføring og en full blokkeringsside trenger forskjellige forklaringer.

Med CURLOPT_RETURNTRANSFER aktivert på det eksisterende konfigurerte 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);

Samle disse verdiene før du frigjør handle. Den strenge sammenligningen skiller overføringsfeil fra vellykkede kropper som en tom streng eller “0”. HTTP-feilstatuser er ikke automatisk curl_exec-feil, så tolk også statusen.

Telleren for nedlastede data utelater headere. Den deklarerte verdien kommer fra Content-Length og er -1 når størrelsen er ukjent. Et svar kan med rette utelate Content-Length; en ukjent verdi er ikke en diagnose på en avkortet fil.

Automatisk innholdskoding gir nok en forskjell. Content-Length beskriver vanligvis den komprimerte representasjonen, mens PHP-strengen kan inneholde dekomprimerte byte. Å sammenligne strlen($body) med den headeren sammenligner da ulike representasjoner.

cURL kan rapportere CURLE_PARTIAL_FILE når overføringen bryter en forventet størrelse. Behold den feilen i stedet for å behandle enhver ikke-tom utdata som suksess. Motsatt kan en vellykket overføring med et lite 200-svar være hele siden kilden eller proxyen valgte å returnere.

Til slutt kontroller det nødvendige innholdet. HTML hentet av cURL kjører ikke JavaScript for å fylle siden. Seksjoner nettleseren viser, kan mangle i det opprinnelige svaret selv når hver overført byte har ankommet.

Relaterte artikler