PHP脚本没有从NSURLSession接收POST数据

时间:2016-01-30 18:18:28

标签: php objective-c

我正在尝试从我的iOS应用程序向我的服务器中的PHP脚本发出HTTP请求,发送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

哪个不对。我不确定问题是什么。

我的代码基于此解决方案:https://stackoverflow.com/a/19101084/555690。在同一个问题中,提问者还发布了另一个解决方案而没有使用NSDictionary,这对我有用,但我不明白为什么这个特定的解决方案无效。

1 个答案:

答案 0 :(得分:0)

因此,您必须使用NSUTF8StringEncoding对字符串进行编码。

根据我的经验,最简单/最好的方法是使用&#34; post string&#34;相反,所以你可以编码。

此外,您要在其中添加NSError *error = nil;或类似内容。此外,您可能希望将其添加到主delegateQueue中,以便您可以使用其委托来处理它。

这是一个例子(我测试了它):

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();

希望这有帮助!