Ciao Ragazzi, oggi vi volevo parlare di una libreria molto interessante: ASIHTTPRequest! A cosa serve? ASIHTTPRequest ci permetterà in modo davvero semplice di comunicare con un web service e, in particolare, potremo creare richieste HTTP e interagire con servizi REST (GET, POST, PUT, DELETE). Credo che questa che sto per presentarvi sia la libreria più completa e, non meno importante, piu semplice, da utilizzare durante lo sviluppo delle nostre applicazioni iPhone e iPad.
Preparare un progetto per l’uso di ASIHTTPRequest
Prima cosa, dovremo scaricare questa libreria, per farlo possiamo passare attraverso questo link diretto.
Una volta ottenuta decomprimiamo il file appena scaricato, apriamo quindi il nostro progetto Xcode per iPhone ed entriamo nel gruppo “Classes”. A questo punto dobbiamo copiare tutti i file al suo interno (tranne le ultime 3 cartelle) e importateli nel progetto stesso (ricordiamoci di spuntare l’opzione che ci permetterà di copiare effettivamente i file all’interno del progetto).
Copiamo ancora i file Reachability, sempre all’interno del nostro progetto e concludiamo i preparativi importando infine i seguenti framework:
- CFNetwork,
- SystemConfiguration,
- MobileCoreServices,
- libz.1.2.3.dylib
Bene, ora tutto è pronto e non ci resta che utilizzare la risorsa che abbiamo appena scaricato e importato per realizzare le nostre richieste.
Come funziona ASIHTTP?
Vediamo qualche esempio di codice per capire come usare ASIHTTPRequest nelle nostre app. Supponiamo di dover creare una richiesta in POST in cui allegheremo delle stringhe e dei file.
Innanzitutto importiamo:
#import "ASIFormDataRequest.h"
Quindi, così, creiamo la nostra richiesta:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setPostValue:mail forKey:@"usermail"];
[request setPostValue:idVersione forKey:@"versionid"];
[request setFile:path forKey:@"userfile"];
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_0
[request setShouldContinueWhenAppEntersBackground:YES];
#endif
[request setDelegate:self];
[request setDidFailSelector:@selector(uploadFailed:)];
[request setDidFinishSelector:@selector(uploadFinished:)];
[request startSynchronous];
Vediamo cosa abbiamo fatto. Semplicemente, nella prima riga inizializziamo la request inserendo in urlString l’indirizzo a cui inviare la richiesta, poi aggiungiamo i valori, mail per “usermail”, idVersione per “versionid” e in fine alleghiamo un file dandogli il path e la chiave (naturalmente i paramentri andranno settati secondo le proprie richieste ed esigenze).
Se l’iOS installato è maggiore o uguale alla 4.0 allora il background è supportato, quindi facciamo sì che l’app entri in background continuando ad inviare la richiesta, impostiamo quindi il Delegate e infine settiamo i due metodi utili quando o l’upload fallisce oppure termina semplicemente.
Vediamo ora il codice di implementazione dei due metodi appena citati:
- (void)uploadFailed:(ASIHTTPRequest *)theRequest
{
//[resultView setText:[NSString stringWithFormat:@"Request failed:\r\n%@",[[theRequest error] localizedDescription]]];
NSLog(@"Request failed:\r\n%@",[[theRequest error] localizedDescription]);
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error"
message: [[theRequest error] localizedDescription]
delegate:nil cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
;
;
}
- (void)uploadFinished:(ASIHTTPRequest *)theRequest
{
//[resultView setText:[NSString stringWithFormat:@"Finished uploading %llu bytes of data",[theRequest postLength]]];
NSLog(@"Finished uploading %llu bytes of data",[theRequest postLength]);
}
Come vedete, niente di particolare.
Cosi facendo abbiamo creato, con poche righe di codice, una request in POST.
Conclusioni
Naturalmente ASIHTTPRequest offre molte più possibilità di quanto mostrato, come per esempio potremmo ottenere il progresso dell’upload o download di un file o ancora la potremo creare form di login o sfruttare https. Insomma, questa è solo una piccola guida introduttiva a questa interessante ed utilissima libreria, per ulteriori dettagli vi rimando a questo indirizzo, in cui troverete la più completa documentazione a riguardo (in inglese) che ho trovato fino ad ora navigando in giro per il web.
Buon lavoro e alla prossima, magari con qualche bel tutorial più completo!
Andrea
8 Responses to “ASIHTTPRequest: creare richieste HTTP e interagire con webService REST dalle nostre applicazioni iPhone e iPad”
19 Maggio 2011
Tommasociao, come potrei fare una schermata di login?
29 Maggio 2011
gigio@Tommaso :quoto
26 Ottobre 2011
giovannipurtroppo non funziona più la libreria 🙁 è incompatibile con ARC
26 Ottobre 2011
Andrea Cappellottoforse non funziona più per via della nuova LLVM non di sicuro perchè è incompatibile con ARC….;)
26 Ottobre 2011
Andrea Cappellottoavevo confuso..:) hai ragione è incompatibile con ARC, però ti basta selezionare la vecchia LLVM e torna a funzionare… prima di passare al 4.2 ci conviene aspettare che vengano aggiornate le varie librerie….
26 Ottobre 2011
Andrea Cappellottoquesta è una buona alternativa!!
https://github.com/gowalla/AFNetworking
2 Novembre 2011
Francescocome si fà a selezionare la vecchia LLVM per farlo funzionare???
7 Marzo 2012
giovanniasihttprequest può essere usata anche per fare un upload di file presenti sull’iphone su un server remoto REST?
non ho trovato nulla che mi dia conferma o smentita 🙁
Per ARC ho trovato la soluzione, mettere il flag -fno-objc-arc ai file .m della classe di ASIhttprequest 🙂