====== Introduzione a libsoup ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//27/10/2011//** \\ \\ [[http://developer.gnome.org/libsoup/stable/index.html|Libsoup]] รจ una libreria client/server http ideale per interagire con server web preesistenti oppure per realizzare soluzioni client/server personalizzate. In questo articolo vedremo come prelevare del testo(il nostro indirizzo ip) restituito da una pagina web. ===== La nostra pagina web ===== La nostra pagina web che ci restituisce il nostro ip pubblico. \\ \\ **index.php** ===== Il codice ===== #include int main(int argc, char* argv[]) { //Inizializziamo i tipi di glib g_type_init(); //Creiamo una nuova sessione SoupSession* session = soup_session_async_new (); //Creiamo il nostro messaggio per il server (che dopo la richiesta conterra' anche la risposta) SoupMessage *msg; msg = soup_message_new ("GET", "http://www.freemedialab.org/myip/index.php"); //Inviamo il messaggio al nostro server http e riceviamone la risposta guint status; status = soup_session_send_message (session, msg); //Stampiamo lo stato della richiesta e il contenuto della risposta del server printf("Stato richiesta->%d\n",status); printf("reason_phrase->%s\n",msg->reason_phrase); printf("ResponseBody->%s\n",msg->response_body->data); return 0 ; } E' molto importatnte conoscere la struttura [[http://developer.gnome.org/libsoup/stable/SoupMessage.html|**SoupMessage**]] in quanto il risultato delle nostre richieste, compreso di esito viene salvato in essa. typedef struct { const char *method; guint status_code; char *reason_phrase; SoupMessageBody *request_body; SoupMessageHeaders *request_headers; SoupMessageBody *response_body; SoupMessageHeaders *response_headers; } SoupMessage; ===== Il makefile ===== CPP = gcc OPTS = `pkg-config --cflags --libs libsoup-2.4` all: $(CPP) test.c -o test $(OPTS) clean: rm test ===== Inviare dati di un form html con POST ===== Qualora volessimo inviare dei dati di un form via POST basta fare delle piccole modifiche al codice: ... //Un messaggio soup contenente la pagina a cui inviare i dati SoupMessage* msg = soup_message_new ("POST", "https://www.dominio.org/miapagina.php"); //Codifico ed invio i campi "name" ed "email" con il loro contenuto char* formdata= soup_form_encode ("name","Fabio Di Matteo","email","myaddress@mail.com" ); //Specifico il tipo del messaggio nell'header del pacchetto soup_message_set_request (msg, "application/x-www-form-urlencoded", SOUP_MEMORY_COPY, (const)formdata, strlen(formdata)); //Invio il messaggio soup guint status; status = soup_session_send_message (session, msg); ... ===== Un esempio concreto: scaricare i feed della nostra gmail ===== #include int main(int argc, char* argv[]) { //Inizializziamo i tipi di glib g_type_init(); //Creiamo una nuova sessione SoupSession* session = soup_session_async_new (); SoupMessage* msg = soup_message_new ("GET", "https://myuser:mypassword@mail.google.com/mail/feed/atom"); //Invio la richiesta guint status = soup_session_send_message (session, msg); printf("Stato richiesta->%d\n",status); printf("reason_phrase->%s\n",msg->reason_phrase); printf("ResponseBody:\n\n%s\n",msg->response_body->data); return 0 ; }