cURL este un utilitar in linia de comanda pentru transfer de fisiere cu sintaxa URL, care suporta FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE si LDAP. cURL suporta certificate HTTPS, HTTP POST, HTTP PUT, uploadare pe FTP, uploadare HTTP bazata pe formulare, proxy-uri, cookies, autentificare utilizator+parola (Basic, Digest, NTLM, Negotiate, kerberos …), reluarea transferului de fisiere, proxy tunneling si multe alte trucuri folositoare. cURL este software open source/gratuit distribuit sub licenta MIT.
Libraria / API-ul corespunzator pe care utilizatorii il pot incorpora in programele lor este libcurl; cURL este un wrapper independent de libraria libcurl. Libcurl se foloseste pentru a oferi posibilitati de transfer URL pentru numeroase aplicatii (atat open-source cat si proprietare).
Exista API-uri peste libcurl pentru mai mult de 30 de limbaje.
Elementele de baza ale interfetei “Easy” a libcurl:
- Clientul stabileste o conexiune cu serverul
- Clientul trimite o cerere (de obicei o operatie
GETsauPOST) - Serverul trimite inapoi niste date(HTML sau un mesaj de eroare)
- Clientul si serverul termina / inchid conexiunea
libCURL se afla in mijlocul acestui proces. Pentru il folosi, se configureaza un obiect context cu datele cererii (URL, parametrii) si handlerele de raspuns (functii de callback). Acest context trebuie apoi pasat librariei, care se ocupa de transportul de nivel scazut prin retea (initierea si inchiderea conexiunii, transferul de date) dupa care apeleaza unul sau mai multe handlere de raspuns.
Trebuie observat ca libCURL nu face nimic cu datele in sine; este mai degraba un framework de transfer de date care apeleaza calback-urile oferite de programator pentru a face treaba mai dificila. Aceasta separare clara intre transport si gestionare abstractizeaza dezvoltarea de la retelistica de nivel scazut si probleme de protocol astfel incat programatorul se poate concentra la scrierea aplicatiei in sine.
Folosirea interfetei “easy” a libcurl implica urmatoarea secventa de apeluri din API:
curl_global_init(), pentru a initializa libraria curl (o data per program)curl_easy_init(), pentru a crea un contextcurl_easy_setopt(), pentru a configura acel contextcurl_easy_perform(), pentru a initia cererea si a apela callback-urilecurl_easy_cleanup(), pentru a curata contextulcurl_global_cleanup(), pentru a inchide libraria curl (o data per program)
curl_easy_setopt() merita atentie: curl_easy_setopt(CURL* ctx , CURLoption key , value )Parametrii sunt contextul, numele optiunii si respectiv valoarea optiunii. O valoare trebui gandita ca un void* (ceea ce nu este), pentru ca poate fi orice tip de date. Totusi, acel tip de date ar trebui sa se potriveasca cu tipul de date al cheii (key) pe care o seteaza.Pentru mai multe detalii privind interfata "Easy" sau interfata "Multi" vizitati http://curl.haxx.se/libcurl/c/ unde veti gasi API-ul de C.