Počnite s rezultatom cURL-a kada stranica preuzeta preko proxyja izgleda nepotpuna. Kratak odgovor, neuspješan prijenos i potpuna stranica blokade traže različita objašnjenja.

Uz omogućen CURLOPT_RETURNTRANSFER na postojećem konfiguriranom handle-u:

$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);

Prikupte ove vrijednosti prije nego što oslobodite handle. Stroga usporedba razlikuje neuspjeh prijenosa od uspješnih tijela kao što su prazan string ili “0”. HTTP statusi greške nisu automatski curl_exec neuspjesi, zato protumačite i status.

Brojač preuzimanja isključuje zaglavlja. Deklarirana vrijednost dolazi iz Content-Length i iznosi -1 kada je ta veličina nepoznata. Odgovor može legitimno izostaviti Content-Length; nepoznata vrijednost nije dijagnoza odrezane datoteke.

Automatsko dekodiranje sadržaja uvodi još jednu razliku. Content-Length obično opisuje komprimiranu reprezentaciju, dok PHP string može sadržavati dekomprimirane bajtove. Usporedba strlen($body) s tim zaglavljem tada uspoređuje različite reprezentacije.

cURL može prijaviti CURLE_PARTIAL_FILE kada prijenos prekrši očekivanu veličinu. Sačuvajte tu grešku umjesto da svaki neprazan izlaz smatrate uspjehom. Suprotno tome, uspješan prijenos s malim odgovorom 200 može biti cijela stranica koju je izvor ili proxy odlučio vratiti.

Na kraju provjerite potreban sadržaj. HTML koji cURL dohvati ne izvršava JavaScript da popuni stranicu. Dijelovi koje prikazuje preglednik mogu izostati iz izvornog odgovora čak i kada je svaki preneseni bajt stigao.

Povezani članci