Richieste HTTP e JSON con C++ e CURL

Mattepuffo's logo
Richieste HTTP e JSON con C++ e CURL

Richieste HTTP e JSON con C++ e CURL

Oggi vedremo come usare la libreria CURL con il C++.

Il codice che vedremo è abbastanza multi piattaforma; ovviamente è necessario installare CURL e linkare il percorso giusto alla libreria, cose che differiscono da OS a OS.

Su Linux e Mac dovreste avere già CURL preinstallato; su Windows vi consiglio di procedere installando Cygwin.

Non mi soffermo su questo passaggio, ma do per scontato che l'abbiate fatto.

Detto ciò creiamo una nostra classe per usare questa libreria.

Cominciamo con il file .h:

#ifndef READ_H
#define    READ_H

#include <iostream>
#include <curl/curl.h>

using namespace std;

class Read {
public:
    Read();
    virtual ~Read();
    void read(string file);
private:
    string url;
    CURL *curl;
    CURLcode res;
    struct curl_slist *headers;
};

#endif

Nella classe abbiamo definito una funzione per leggere i dati da un file preso in remoto; la funzione richiede un unico parametro, che è appunto il file da chiamare.

 

Nel file .cpp di implementazione:

#include "read.h"

Read::Read() {
    headers = NULL;
    url = "http://www.sito.com/";
}

Read::~Read() {
}

void Read::read(string file) {
    curl_slist_append(headers, "Accept: application/json");
    curl_slist_append(headers, "Content-Type: application/json");
    curl_slist_append(headers, "charset: utf-8");
    curl = curl_easy_init();
    string completeUrl = url.append(file);
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_URL, completeUrl.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            cerr << "Error: " << curl_easy_strerror(res) << endl;
        }
        curl_easy_cleanup(curl);
        curl_global_cleanup();
    }
}

Nel costruttore inizializiamo due variabili; nella stringa url mettiamo il percorso del dominio che varrà per eventuali altre chiamate, così nella funzione non dobbiamo far altro che indicare il file specifico, cosa che facciamo in completeUrl.

Inoltre il nostro file remoto ci darà i risultati in formato JSON (in un prossimo articolo vedremo come fare il parsing di JSON).

Sotto metto altre impostazioni.

La funzione curl_easy_perform effettua la richiesta e ci stampa la risposta.

Sotto controlliamo se ci sono errori, e in caso li stampiamo.

Alla fine facciamo un clean di tutto.

Il prossimo passo sarà trasformare la risposta in una stringa, ma lo vedremo in un altro articolo.

Ricordatevi di linkare la libreria CURL, che dipende dal sistema dove vi trovate.

Sotto Windows ho installato CURL tramite Cygwin, ed ho quindi incluso questo percorso: C:/cygwin/lib/libcurl.dll.a.

Io ho installato Cygwin direttamente sotto C.

Su Linux e Mac dovete cercare il percorso della libreria.


Condividi

Commentami!