Begynd med cURLs resultat, når en side hentet gennem en proxy ser ufuldstændig ud. Et kort svar, en mislykket overførsel og en komplet blokeringsside kræver forskellige forklaringer.

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

Indsaml disse værdier, før du frigiver handle. Den strenge sammenligning skelner overførselsfejl fra vellykkede kroppe som en tom streng eller “0”. HTTP-fejlstatusser er ikke automatisk curl_exec-fejl, så fortolk også status.

Tælleren for downloadet data udelader headere. Den deklarerede værdi kommer fra Content-Length og er -1, når størrelsen er ukendt. Et svar kan med rette udelade Content-Length; en ukendt værdi er ikke en diagnose på en afkortet fil.

Automatisk indholdskodning tilføjer endnu en forskel. Content-Length beskriver ofte den komprimerede repræsentation, mens PHP-strengen kan indeholde dekomprimerede bytes. At sammenligne strlen($body) med den header sammenligner da forskellige repræsentationer.

cURL kan rapportere CURLE_PARTIAL_FILE, når overførslen bryder en forventet størrelse. Bevar den fejl i stedet for at behandle enhver ikke-tom output som succes. Omvendt kan en vellykket overførsel med et lille 200-svar være hele den side, som kilden eller proxyen valgte at returnere.

Til sidst kontrollér det krævede indhold. HTML hentet af cURL udfører ikke JavaScript for at udfylde siden. Afsnit, som browseren viser, kan mangle i det oprindelige svar, selv når hver overført byte er ankommet.

Relaterede artikler