POST с NSURLConnection - без JSON - PullRequest
       22

POST с NSURLConnection - без JSON

3 голосов
/ 24 января 2012

Я пытаюсь написать приложение для iPhone в Objective-C.Мне нужно POST данные с помощью NSURLConnection.В каждом примере я могу найти предложения с JSON;Мне не нужно использовать JSON.Все, что мне нужно сделать, это POST данные и получить простой 1 или 0 (успешно или неудачно) из сценария PHP.Ничего больше.

Я сталкивался с этим кодом, но я не уверен, как его использовать или изменить, чтобы не использовать JSON:

- (void)performRequest {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL                   URLWithString:@"http://someplace.com/"]];
    [request setValue:@"Some Value" forHTTPHeaderField:@"Some-Header"];
    [request setHTTPBody:@"{\"add_json\":\"here\"}"];
    [request setHTTPMethod:@"POST"];
    [NSURLConnection connectionWithRequest:[request autorelease] delegate:self];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
 // Fail..
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
 // Request performed.
}

Ответы [ 3 ]

14 голосов
/ 24 января 2012

Вот как создать обычный пост.

Сначала создайте запрос правильного типа:

NSURL *URL = [NSURL URLWithString:@"http://example.com/somepath"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";

Теперь отформатируйте данные вашего поста в виде строки в кодировке URL, например так:

NSString *params = @"param1=value1&param2=value2&etc...";

Не забудьте закодировать отдельные параметры, используя процентное кодирование.Вы не можете полностью полагаться на метод NSString stringByAddingPercentEscapesUsingEncoding для этого (Google, чтобы выяснить, почему), но это хорошее начало.

Теперь мы добавим данные публикации в ваш запрос:

NSData *data = [params dataUsingEncoding:NSUTF8StringEncoding];
[request addValue:@"8bit" forHTTPHeaderField:@"Content-Transfer-Encoding"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request addValue:[NSString stringWithFormat:@"%i", [data length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:data];

И это все, теперь просто отправьте ваш запрос как обычно, используя NSURLConnection (или что-то еще).

Чтобы интерпретировать ответ, который возвращается, см. Ответ Модика.

2 голосов
/ 24 января 2012

Вы можете использовать следующий метод NSURLConnection, если вы нацеливаетесь на ios 2.0 - 4.3 (в ios 5 кажется устаревшим)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
  NSString * string = [[NSString alloc] initWithData:data encoding:
                       NSASCIIStringEncoding];

  if (string.intValue == 1) {

  } else {

  }
}
0 голосов
/ 15 августа 2014

У меня очень похожая ситуация с whitebreadb.Я не согласен с ответами, представленными и принятыми, но хотел бы опубликовать свои собственные, поскольку приведенный здесь код не работал для меня (мой PHP-скрипт сообщил об отправленном параметре как строку нулевой длины), но я нашел это вопрос , который помог.

Я использовал это, чтобы выполнить публикацию в мой PHP-скрипт:

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.myphpscriptlocation.net/index.php?userID=%@",self.userID_field.stringValue]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
request.HTTPMethod = @"POST";
NSURLConnection *c = [NSURLConnection connectionWithRequest:request delegate:self];
...