Я пытаюсь сделать 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
, которое работает для меня, но я не понимаю, почему это конкретное решение не работает.
Поэтому вам нужно закодировать строку с помощью 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();
в верхней части файла.
Надеюсь это поможет!