Curl je alat koji nam omogućava da šaljemo ili primamo podatke preko mreže putem različitih protokola. Jedna od njegovih najčešćih upotreba je na serverima za izradu HTTP zahtjeva. Razumijevanje rada sa curl-om je fundamentalno u web razvoju, posebno kada trebamo komunicirati s API-jima. Jedna od ključnih stvari pri izradi HTTP zahtjeva je sposobnost ispravnog rukovanja statusima greške ili uspješnosti. PHP nam nudi funkciju `curl_getinfo()` za preuzimanje statusa HTTP zahtjeva.
[b]Rješenje za štampanje HTTP statusnog koda u PHP-u pomoću curl-a[/b] je prilično jednostavno.
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://example.com");
curl_exec($curl);
if (!curl_errno($curl)) {
$info = curl_getinfo($curl);
echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
echo 'HTTP Status: ' . $info['http_code'];
} else {
echo 'Curl error: ' . curl_error($curl);
}
curl_close($curl);
Da biste razumjeli ovaj blok koda, hajde da ga rastavite korak po korak:
Prvo, inicijaliziramo novu curl sesiju kroz `curl_init()`. Ova funkcija vraća ručicu uvijanja za uspjeh, FALSE za greške. Koristimo curl_setopt za postavljanje nekih opcija za cURL prijenos. U našem slučaju, postavljamo CURLOPT_URL na URL koji želimo preuzeti.
Nakon što su sve naše opcije postavljene, koristimo `curl_exec()` da izvršimo sesiju. Ako se sesija uspješno izvrši, `curl_errno()` će vratiti 0. U ovom konkretnom slučaju, izlaz nas zanima samo ako nije bilo greške. Ako nema greške, koristimo `curl_getinfo()` na našem curl ručku da dohvatimo informacije o sesiji. Informacije koje nas posebno zanimaju su informacije o URL-u i ukupno vrijeme prijenosa, i što je najvažnije, HTTP statusni kod. Ako je došlo do greške u izvršavanju curl-a, obrađujemo je u naredbi else.
Razumijevanje HTTP statusnih kodova
HTTP odgovori dolaze sa statusnim kodovima koji ukazuju na vrstu odgovora. To su trocifreni brojevi gdje prva cifra definira klasu odgovora. Postoji 5 klasa odgovora:
- 1xx (Informativni): Zahtjev je primljen, proces se nastavlja
- 2xx (Uspješno): Zahtjev je uspješno primljen, shvaćen i prihvaćen
- 3xx (Preusmjeravanje): Potrebno je poduzeti daljnje radnje kako bi se zahtjev dovršio
- 4xx (Greška klijenta): Zahtjev sadrži lošu sintaksu ili se ne može ispuniti
- 5xx (Greška servera): Server nije uspio ispuniti naizgled valjan zahtjev
Razumijevanje ovih kodova pomaže u pravilnom rukovanju odgovorima u našim aplikacijama.
Neke uobičajene PHP curl funkcije
PHP-ova curl biblioteka ima gomilu funkcija koje olakšavaju rad sa HTTP-om. Evo nekoliko:
- curl_init: Inicijalizira novu cURL sesiju
- curl_setopt: Postavite opciju na cURL sesiji
- curl_exec: Izvršava datu cURL sesiju
- curl_getinfo: Dohvati informacije o cURL sesiji
- curl_errno: Vraća zadnji broj greške
- curl_error: Vraća string koji sadrži posljednju cURL grešku