Beginnen Sie mit dem Ergebnis von cURL, wenn eine über einen Proxy geladene Seite unvollständig wirkt. Eine kurze Antwort, eine fehlgeschlagene Übertragung und eine vollständige Sperrseite brauchen unterschiedliche Erklärungen.

Mit aktiviertem CURLOPT_RETURNTRANSFER auf dem bereits konfigurierten 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);

Sammeln Sie diese Werte, bevor Sie das Handle freigeben. Der strikte Vergleich unterscheidet einen Übertragungsfehler von erfolgreichen Bodies wie einer leeren Zeichenkette oder “0”. HTTP-Fehlerstatus sind nicht automatisch curl_exec-Fehler, deshalb muss auch der Status interpretiert werden.

Der Zähler für heruntergeladene Daten schließt Header aus. Der deklarierte Wert stammt aus Content-Length und ist -1, wenn die Größe unbekannt ist. Eine Antwort darf Content-Length zu Recht weglassen; ein unbekannter Wert ist keine Diagnose einer abgeschnittenen Datei.

Die automatische Inhaltsdekodierung bringt eine weitere Unterscheidung. Content-Length beschreibt meist die komprimierte Repräsentation, während der PHP-String dekomprimierte Bytes enthalten kann. Ein Vergleich von strlen($body) mit diesem Header vergleicht dann verschiedene Repräsentationen.

cURL kann CURLE_PARTIAL_FILE melden, wenn die Übertragung eine erwartete Größe verletzt. Behalten Sie diesen Fehler, statt jede nichtleere Ausgabe als Erfolg zu werten. Umgekehrt kann eine erfolgreiche Übertragung mit einer kleinen 200-Antwort die ganze Seite sein, die der Ursprung oder der Proxy zurückgeben wollte.

Prüfen Sie schließlich den benötigten Inhalt. Von cURL geladenes HTML führt kein JavaScript aus, um die Seite zu füllen. Vom Browser dargestellte Abschnitte können in der ursprünglichen Antwort fehlen, selbst wenn jedes übertragene Byte angekommen ist.

Ähnliche Artikel