Веб-сервис AFNetworking POST to REST

Краткая предыстория: наш предыдущий разработчик использовал ASIHTTPRequest для выполнения POST-запросов и извлечения данных из нашего веб-сервиса. По неизвестным причинам эта часть нашего приложения перестала работать. Казалось, достаточно времени, чтобы проверить будущее и перейти на AFNetworking. Веб-сервис REST работает на платформе CakePHP.

Короче говоря, я не получаю строку ответа на запрос, используя AFNetworking.

Я знаю, что веб-сервис работает, потому что я могу успешно отправлять данные и получать правильный ответ с помощью curl: curl -d "data[Model][field0]=field0value&data[Model][field1]=field1value" https://example.com/api/class/function.plist

В соответствии с предыдущими инструкциями разработчика я пришел со следующим.

#import "AFHTTPRequestOperation.h"    

…

- (IBAction)loginButtonPressed {

    NSURL *url = [NSURL URLWithString:@"https://example.com/api/class/function.plist"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    [request setHTTPMethod:@"POST"];

    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

    [request setValue:[usernameTextField text] forHTTPHeaderField:@"data[User][email]"];

    [request setValue:[passwordTextField text] forHTTPHeaderField:@"data[User][password]"];

    AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {  

        NSLog(@"operation hasAcceptableStatusCode: %d", [operation.response statusCode]);

        NSLog(@"response string: %@ ", operation.responseString);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"error: %@", operation.responseString);

    }];

    [operation start];

}

вывод: операция hasAcceptableStatusCode: 200 строка ответа: пустой файл plist

попытка решения 1: Почтовый запрос AFNetworking предлагаемое решение использует функцию AFHTTPRequestOperation, называемую operationWithRequest. Однако, когда я пытаюсь использовать указанное решение, я получаю предупреждение «Метод класса '+operationWithRequest:completion:' не найден (тип возврата по умолчанию равен 'id'»

попытка решения 2: NSURLConnection. Вывод: я могу распечатать сообщение об успешном завершении, но не строку ответа. *update - возвращает пустой plist.

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSString *httpBodyData = @"data[User][email]=username@example.com&data[User][password]=awesomepassword";
[httpBodyData dataUsingEncoding:NSUTF8StringEncoding];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[NSData dataWithContentsOfFile:httpBodyData]];
NSHTTPURLResponse __autoreleasing *response;
NSError __autoreleasing *error;
[NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];

// *update - returns blank plist
NSData *responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
NSString *str = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"responseData %@",str);

if (error == nil && response.statusCode == 200) {
    // Process response
    NSLog(@"success");//returns success code of 200 but blank
    NSLog(@"resp %@", response );
} else {
    // Process error
    NSLog(@"error");
}

8
задан Community 23 May 2017 в 12:21
поделиться