Autore: Fabio Di Matteo
Ultima revisione: 27/10/2011
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 che ci restituisce il nostro ip pubblico.
index.php
<?php echo @$REMOTE_ADDR; ?>
#include <libsoup/soup.h> 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", "https://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 **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;
CPP = gcc OPTS = `pkg-config --cflags --libs libsoup-2.4` all: $(CPP) test.c -o test $(OPTS) clean: rm test
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); ...
#include <libsoup/soup.h> 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 ; }
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.