Ce face curl_init / curl_setopt / curl_exec
cURL este extensia PHP pentru comunicarea cu alte servere: apeluri API, trimiterea de formulare, descărcări. Lucrul se face în trei pași: curl_init creează cererea, curl_setopt setează câte o opțiune, iar curl_exec trimite cererea.
Cea mai importantă opțiune este CURLOPT_RETURNTRANSFER => true: fără ea, curl_exec afișează direct răspunsul în loc să îl returneze. Pentru POST setezi CURLOPT_POST și CURLOPT_POSTFIELDS, pentru antete CURLOPT_HTTPHEADER, iar pentru limita de timp CURLOPT_TIMEOUT.
Din PHP 8.0, cererea este un obiect CurlHandle eliberat automat. curl_close nu mai face nimic și este marcată ca învechită în PHP 8.5, deci nu mai e nevoie să o apelezi.
Parametri
| Parametru | Descriere |
|---|---|
$url |
Opțional. Adresa cererii. Poate fi setată și mai târziu cu CURLOPT_URL. |
Ce returnează
curl_init returnează un obiect CurlHandle (sau false). curl_exec returnează răspunsul ca text (cu CURLOPT_RETURNTRANSFER) sau false la eroare.
Exemple
Exemplul 1: Cerere GET către un API
Ultimele articole de pe dexblog.ro, prin API-ul REST al WordPress.
<?php
$ch = curl_init("https://www.dexblog.ro/wp-json/wp/v2/posts?per_page=3&_fields=id,title");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$raspuns = curl_exec($ch);
$articole = json_decode($raspuns, true);
foreach ($articole as $articol) {
echo $articol["id"] . " - " . $articol["title"]["rendered"] . "\n";
}
Rezultat real (necesită conexiune la internet)
74938 - Cum afectează inteligența artificială schimbările climatice în 2026: Ghid complet
108818 - Cum să șterg contul Microsoft
106115 - Cele mai bune prompt-uri AI pentru crearea unui plan de mese săptămânal în 2026: Ghid complet
Exemplul 2: Cerere POST cu JSON
Serviciul de test httpbin.org trimite înapoi datele primite.
<?php
$ch = curl_init("https://httpbin.org/post");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["nume" => "Ana", "oras" => "Iași"]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
$raspuns = json_decode(curl_exec($ch), true);
echo "Cod HTTP: " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . "\n";
print_r($raspuns["json"]);
Rezultat real (necesită conexiune la internet)
Cod HTTP: 200
Array
(
[nume] => Ana
[oras] => Iași
)
Greșeli frecvente
- Uiți
CURLOPT_RETURNTRANSFER. Răspunsul este afișat direct în pagină, iarcurl_execreturnează doartrue. - Nu setezi
CURLOPT_TIMEOUT. Dacă serverul celălalt nu răspunde, scriptul tău așteaptă până la limita de execuție a PHP. - Dezactivezi verificarea certificatului cu
CURLOPT_SSL_VERIFYPEER => falseca să scapi de o eroare SSL. Conexiunea devine vulnerabilă la interceptare. Repară certificatele CA ale serverului.
Comenzi înrudite
curl_setopt_array: Setează mai multe opțiuni cURL dintr-o dată, dintr-un tablou. Codul devine mai scurt și mai ușor de citit.curl_error / curl_errno: Returnează mesajul ultimei erori cURL (domeniu inexistent, timp expirat, problemă SSL). curl_errno dă codul numeric.json_decode: Transformă un text JSON în tablou sau obiect PHP.http_build_query: Transformă un tablou în textul de interogare al unui URL (a=1&b=2), cu toate valorile codate corect.