iPhone: HTTP-запрос POST - PullRequest
       6

iPhone: HTTP-запрос POST

1 голос
/ 26 февраля 2012

Мне нужно отправить некоторые данные на сервер из моего приложения для iphone.

У меня есть данные как separate arrays of ID,name,quantity и strings with name,address,phone & email.

Мне нужно изменить данные массива NSmutable в этот формат JSON

      [
            {"id":"139","name":"Samosa","quantity":"332","spice":"hot"},
            {"id":"149","name":"rice","quantity":"4","spice":"mild"},
            .....
      ]

Мое единственное сомнение -
[request setHTTPMethod:@"POST"];
Достаточно ли указанной выше строки для установки POST-запроса.

Как я могу добавить вышеуказанные детали в запрос POST?

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

Используйте сериализатор JSON. Вы можете использовать SBJSON . С SBJSON код будет выглядеть так:

SBJsonWriter *jsonWriter = [[[SBJsonWriter alloc] init] autorelease];
NSString *jsonParams = [jsonWriter stringWithObject:<your-NSArray>];

Для добавления этого jsonParams в POST:

NSString *postData = [jsonParams stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:postURL];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]];
1 голос
/ 26 февраля 2012

Используйте setHTTPBody: , чтобы добавить данные публикации в объект HTTP-запроса.
Используйте NSJSONSerialization для сериализации вашего массива.

NSMutableArray *array = getSomeArray();
NSError *err;
NSData *json;

json = [NSJSONSerialization dataWithJSONObject:array options:0 error:&err];
if (err) {
    // handle error
}

NSURL *url = getSomeURL();
NSMutableURLRequest *req;

req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:json];

// send your request
1 голос
/ 26 февраля 2012

Недостаточно. Вам также необходимо (минимум):

NSString *your_request_string = @"the thing in JSON format";
NSData *your_data = [your_request_string dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:your_data];
...