www.www.zaachi.com » Blog/Vývoj pro iPhone » Vývoj aplikací pro iPhone: Send data to a Web server

Často potřebujeme aby naše aplikace komunikovala s webovým serverem. Budeme tak muset danému serveru posílat data z naší aplikace.
Odeslání lidovolných dat můžeme rozdělit na dvě části – samotné odeslání (příprava dat a jejich poslání) a zpracování odpovědi.
Pro poslání dat si vytvoříme nový NSMutableURLRequest, ve kterém si inicializujeme adresu, jež se bude volat a na kterou budeme data předávat:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://iphone.zaachi.com/"]];
Tím máme vytvořenou pouze prázdnou proměnnou, se kterou můžeme dále pracovat.
Nejprve nastavíme metodu pro poslání dat. Můžete si vybrat libovolně například POST:
[request setHTTPMethod:@"POST"];
Requestu můžeme nastavit hlavičky pro poslání:
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
Tím máme request vytvořen a přidáme do něj data, která se budou posílat.
Data musí být typu NSData, takže si nejprve můžeme vytvořit data jako NSString a poté je překonvertovat, pro lepší pochopení:
NSString *request_body = [NSString stringWithFormat:@"data=%@", [@"variable" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ];
V request bude existovat v poli POST proměnná s názvem data, která bude obsahovat řetězec „variable“. Proměnnou request_body překonvertujeme na NSData:
NSData *request_data = [request_body dataUsingEncoding:NSUTF8StringEncoding];
Nakonec data přidáme do requestu:
[request setHTTPBody:request_data];
V úplně posledním kroku vytvoříme connection jako NSURLConnection a předáme jí náš request:
NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
Proměnná myConnection obsahuje výsledek requestu, se kterým můžeme dále pracovat:
if( !myConnection) //get the response and retain it
{
NSLog(@"From sendData: data is not sent");
}
Pro zpracování odpovědi serveru využijeme automaticky volaný handler connectionDidFinishLoading, který se volá po dokončení požadavku:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"From sendData: data was sent");
}
Na straně serveru zpracujeme data klasicky, například v PHP bude na danou adresu předána proměnná $_POST[‘data’], ve které budou uloženy odesílaná data:
if( $_POST && array_key_exists('data', $_POST) )
{
$out = $_POST['data'];
}
Odeslání požadavku takovýmto způsobem je vcelku jednoduchá věc. Můžete se ještě jednou podívat na celý kód:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"From sendData: data was sent");
}
-(void)sendData{
//create new request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://iphone.zaachi.com/"]];
//set HTTP Method
[request setHTTPMethod:@"POST"];
//set Headers
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
//Implement request_body for send request here username and password set into the body.
NSString *request_body = [NSString
stringWithFormat:@"data=%@",
[@"variable" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
];
//convert nsstring to nsdata
NSData *request_data = [request_body dataUsingEncoding:NSUTF8StringEncoding];
//set request body into HTTPBody.
[request setHTTPBody:request_data];
//set request url to the NSURLConnection
NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if( !myConnection) //get the response and retain it
{
NSLog(@"From sendData: data is not sent");
}
}

Autor: Zaachi
Publikováno: 23.12.2010 10:30:37
Vývoj aplikací pro iPhone: použití SqLite v iPhone
Vývoj aplikací pro iPhone: Hello World app
Vývoj aplikací pro iPhone: simple switchViewer
Vývoj aplikací pro iPhone: XML parser with NSXMLParser