miercuri, 5 decembrie 2007

cURL

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.

Principalul scop pentru cURL este de a automatiza transferuri de fisiere sau secvente de operatii nesupravegheate. De exemplu, este util pentru a simula interactiunile unui utilizator ce foloseste un browser web.

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:


Un scenariu tipic client/server implica o conexiune si una sau mai multe interactiuni de iteratie cerere/raspuns (request/response)

  1. Clientul stabileste o conexiune cu serverul
  2. Clientul trimite o cerere (de obicei o operatie GET sau POST)
  3. Serverul trimite inapoi niste date(HTML sau un mesaj de eroare)
  4. 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:

  1. curl_global_init(), pentru a initializa libraria curl (o data per program)
  2. curl_easy_init(), pentru a crea un context
  3. curl_easy_setopt(), pentru a configura acel context
  4. curl_easy_perform(), pentru a initia cererea si a apela callback-urile
  5. curl_easy_cleanup(), pentru a curata contextul
  6. curl_global_cleanup(), pentru a inchide libraria curl (o data per program)
Functia 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.

Niciun comentariu: