PHP-скрипт не получает данные POST от NSURLSession

1

Я пытаюсь сделать HTTP-запрос из моего приложения iOS скрипту PHP на моем сервере, отправив данные POST. Код Objective-C следующий:

            NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
            NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:nil];
            NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mywebsite.com/script.php"]
                                                                   cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                               timeoutInterval:60.0];
            [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
            [request setHTTPMethod:@"POST"];

            NSMutableDictionary *info = [NSMutableDictionary dictionary];
            [info setObject:[NSNumber numberWithInt:5] forKey:@"FIRST"];
            [info setObject:[NSNumber numberWithInt:3] forKey:@"SECOND"];

            NSData *data = [NSJSONSerialization dataWithJSONObject:info options:0 error:&error];
            [request setHTTPBody:data];
            NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSLog(@"I GOT THE ANSWER: %@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
            }];

            [postDataTask resume];

И это скрипт PHP:

<?php

$first  = intval($_POST["FIRST"]);
$second = intval($_POST["SECOND"]);

$result = $first + $second;

echo("= " . $result);

?>

Вывод приложений iOS

Я получил ОТВЕТ: = 0

Это неверно. Я не уверен, в чем проблема.

Я основывал свой код на этом решении: qaru.site/questions/32926/.... В этом же вопросе ассер также опубликовал другое решение без использования NSDictionary, которое работает для меня, но я не понимаю, почему это конкретное решение не работает.

Теги:

1 ответ

0

Поэтому вам нужно закодировать строку с помощью NSUTF8StringEncoding.

По моему опыту, самый простой/лучший способ сделать это - вместо этого использовать "пост-строку", чтобы вы могли закодировать его.

Кроме того, вы хотите добавить NSError *error = nil; или что-то в этом роде. Кроме того, вы, вероятно, захотите добавить его в главный делегатQueue, чтобы вы могли обработать его с помощью своего делегата.

Вот пример (и я его протестировал):

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

NSURL *url = [NSURL URLWithString:@"http://localhost:8888/Untitled.php"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *params =@"FIRST=1&SECOND=2";
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSessionDataTask * dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSLog(@"Data = %@", [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]);
}];

[dataTask resume];

Я бы также рекомендовал использовать session_start(); в верхней части файла.

Надеюсь это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню