iOS 9.1 导致我的 JSON NSURL 连接到 PHP 页面时出错

Posted

技术标签:

【中文标题】iOS 9.1 导致我的 JSON NSURL 连接到 PHP 页面时出错【英文标题】:iOS 9.1 has caused an error with my JSON NSURL connection to a PHP page 【发布时间】:2015-12-11 05:33:48 【问题描述】:

ios 9.1 之前,我的应用程序已成功与网络上的 .php 文件通信以获取一些数据库信息。所有这些通信都是使用JSON完成的,用于存储两者之间的信息。我知道有一个问题似乎与发送到我的 .php 文件的数据包有关。

if($_POST == null) // Check for proper posting.

    $handle  = file_get_contents('php://input');
    $body = json_decode($handle, true);

else
    $body == $_POST;        

上面的代码似乎是故障点。我收到一个不为空的 $_POST

-(void)postAuthorize:(NSString*)code :(NSString*)phone

   //build up the request that is to be sent to the server
   NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.example.com/ex.php"]];

   [request setHTTPMethod:@"POST"];
   [request addValue:@"postValues" forHTTPHeaderField:@"METHOD"];

   //create data that will be sent in the post
   NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
   [dictionary setValue:code forKey:@"authorize"];
   [dictionary setValue:phone forKey:@"device"];

   NSLog(@"Dictionary: %@", dictionary);

   //serialize the dictionary data as json
   NSData *data = [[dictionary copy] JSONValue];

   NSLog(@"Data: %@", data);

   [request setHTTPBody:data]; //set the data as the post body
   [request addValue:[NSString stringWithFormat:@"%lu",(unsigned long)data.length] forHTTPHeaderField:@"Content-Length"];
   NSLog(@"data length: %lu", (unsigned long)data.length);
   NSLog(@"Request body %@", [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]);
   NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
   if(!connection)
       NSLog(@"Connection Failed");
   


以上是 iPhone 上的代码。我检查了URL Connection 正文中的JSON,以确保它的格式不正确。好像没有。

这是我得到的错误:

域=NSCocoaErrorDomain 代码=3840。

但我认为这只是因为 PHP 代码失败了。如果我绕过上面的代码,只发回一个静态值,一切都会顺利。

我真的需要帮助。请如果有人能指出什么是错的。我不知道为什么这已经工作了 2 年,现在它从 iOS 9.0 -> 9.1 中断了

问题出现在我的 PHP 中。我猜苹果在 9.0/9.1 中使用 URL Connection 改变了 $_POST 方法。

$handle  = file_get_contents('php://input');
$body = json_decode($handle, true);

【问题讨论】:

【参考方案1】:

把你的php代码改成这个-

$handle  = file_get_contents('php://input');

if($handle == null || $handle == "")
    $body = $_POST; 
else
    $body = json_decode($handle);

【讨论】:

我如何查看这个?我对 PHP 不是很好。 没关系:我确实得到了更多信息 -> 请求正文 通知:未定义变量:example.php 中的正文在线119注意:未定义的变量:导致 example.php 在第 69 行 “错误”:“501” 你可以在你的objective-c代码中查看它作为url连接响应。 而您收到的错误是因为您使用的主体变量在使用之前未定义或初始化。 好的,错误与 == 而不是单个 = 有关。但我有新信息。这就是 $_POST 方法中的内容 -> Array ( ["authorize":"","device":"iPhone"] => )

以上是关于iOS 9.1 导致我的 JSON NSURL 连接到 PHP 页面时出错的主要内容,如果未能解决你的问题,请参考以下文章

无法将 ios 9.1 设​​备连接到 xcode 7.1

iOS 应用程序二进制文件被拒绝 - IPv6

从 url iOS 解析 json 时应用程序崩溃

swiftyJSON 从 NSURL 解析 json

无法在 iOS 中获取 JSON 数据

如何在 iOS 中解析复杂的 JSON 数据