我正在尝试从我的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
,这对我有用,但我不明白为什么这个特定的解决方案无效。
答案 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();
。
希望这有帮助!