2012-03-01 3 views
1

Я ищу, как сделать запрос POST веб-службе REST, в частности услугу CakePHP, и все, что мне кажется, это люди, которые говорят, что используют библиотеку ASIHTTPRequest, но я вижу это не обновляется через год или около того, поэтому я предпочел бы использовать более современный метод, предпочтительно непосредственно из iOS.iOS - Сделать запрос POST для CakePHP REST

Я читал, что вы можете позвонить, используя NSURLConnection, но я действительно не понимаю его, я хотел бы получить более подробное объяснение этого, если бы кто-то мог указать мне в правильном направлении.

Также я уже успешно извлек данные с моего сервера с помощью моего REST API с помощью метода stringWithContentOfURL NSString, но я не могу использовать это, чтобы сделать запрос POST, насколько я знаю.

ответ

5

Обычно я делаю это.

NSURL *url = [NSURL URLWithString:@"http://someurl.com"]; 
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
[req setHTTPMethod:@"POST"]; 
[req setHTTPBody:self.yourData]; 
NSHTTPURLResponse __autoreleasing *response; 
NSError __autoreleasing *error; 
[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; 
if (error == nil && response.statusCode == 200) { 
    // Process response 
} else { 
    // Process error 
} 

[NSURLConnection sendSynchronousRequest:] метод также возвращает NSData объект, который вы тоже можете манипулировать.

+0

Как именно yourData формируется, то я бы сказал, это мое самое большое сомнение. Спасибо. – 8vius

+1

Да, это немного сложно. Самый простой способ - сформировать 'NSString', который выглядит как ваша средняя строка запроса:' param1 = value & param2 = value & param3 = value' - а затем выполните '[yourString dataUsingEncoding: NSUTF8StringEncoding];'. Второй способ - построить 'NSDictionary' с парами параметра-значения, сериализовать его в объект данных JSON (через' NSJSONSerialization' или 'JSONKit', я предпочитаю последний) и отправить его в тело HTTP, но чтобы войти на сервер, вы будете должны читать необработанные данные POST, а не $ _POST. –

+0

Очень полезно, Кир, вы когда-нибудь использовали торт и видели, как они структурируют свои данные для формы POST? – 8vius

1

Я работаю над той же проблемой (передняя часть iOS с поддержкой CakePHP REST POST). Эта тема очень полезна. Попробуйте следующее с завитком:

curl -d "data[Model][field0]=field0value&data[Model][field1]=field1value" https://pathtoyourapi.com/plugin/controller/function.html 

альтернативно

curl -d "data[Model][field0]=field0value&data[Model][field1]=field1value" https://pathtoyourapi.com/plugin/controller/function 
+0

Рад, что это помогло, вы должны перенести мой вопрос * wink wink *: P, но это было бы в PHP, который я предполагаю, вызов завитки. Ответ Кири решил все мои проблемы, и теперь проблема не вызывает звонков в мой API :) – 8vius

+0

@ 8vius, я буду, когда у меня будет больше репутации. Я вижу, как вы разговаривали с вами и с Киром, но мы можем наконец получить ответ на отправку ваших данных на ваш ресурс cakephp? Как я уже отмечал, я получаю правильный ответ данных с завитком, но пока не удался с помощью метода, предложенного Kyr или с AFNetworking (переход из ASIHTTPRequest). – Airuop

+0

Задайте вопрос своим кодом и каким ответом вы получите, так что я могу дать вам руку – 8vius

Смежные вопросы