Objective-C 2.0, iPhone, iPod, iPad, iOS
Отправка POST запроса схожа с отправкой GET запроса. Если вы хотите более подробно узнать о том как работать с NSURLConnection прочтите Отправка GET запроса (NSURLConnection, iOS, Xcode 4.2).
Код отправки POST запроса
Код: Выделить всё
// создаем запрос NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://flapps.ru/example/user-info.php"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0]; request.HTTPMethod = @"POST"; // указываем параметры POST запроса NSString* params = @"param1=2¶m2=2"; request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding];
В этом коде мы устанавливаем метод POST. По умолчанию HTTP методом HTTPMethod является метод GET.
Задать HTTPMethod можно и так
Код: Выделить всё
[request setHTTPMethod: @"POST"];
request.HTTPMethod - указывает параметр через свойство, а setHTTPMethod - через отправку сообщения.
Более подробно про NSMutableURLRequest можно почитать в официальной документации https://developer.apple.com/library/mac ... rence.html
Других отличий от кода из статьи Отправка GET запроса (NSURLConnection, iOS, Xcode 4.2) в этом приложении не будет.
Весь код
Код: Выделить всё
- (void)viewDidLoad{ [super viewDidLoad]; // создаем запрос NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://flapps.ru/example/user-info.php"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0]; request.HTTPMethod = @"POST"; // указываем параметры POST запроса NSString* params = @"param1=2¶m2=2"; request.HTTPBody = [params dataUsingEncoding:NSUTF8StringEncoding]; // создаём соединение и начинаем загрузку NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if (connection) { // соединение началось label.text = @"Connecting..."; // создаем NSMutableData, чтобы сохранить полученные данные receivedData = [[NSMutableData data] retain]; } else { // при попытке соединиться произошла ошибка label.text = @"Connection error!"; } } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // получен ответ от сервера [receivedData setLength:0];} - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ // добавляем новые данные к receivedData [receivedData appendData:data];} - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { // освобождаем соединение и полученные данные [connection release]; [receivedData release]; // выводим сообщение об ошибке NSString *errorString = [[NSString alloc] initWithFormat:@"Connection failed! Error - %@ %@ %@", [error localizedDescription], [error description], [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]; label.text = errorString; [errorString release];} - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // данные получены // здесь можно произвести операции с данными // можно узнать размер загруженных данных //NSString *dataString = [[NSString alloc] initWithFormat:@"Received %d bytes of data",[receivedData length]]; // если ожидаемые полученные данные - это строка, то можно вывести её NSString *dataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; label.text = dataString; // освобождаем соединение и полученные данные [connection release]; [receivedData release]; [dataString release];}
При запуске приложения, как и при использовании метода GET, я увидел это:
Код: Выделить всё
HTTP_USER_AGENT: MethodPOST/1.0 CFNetwork/485.13.9 Darwin/11.0.0<br />