AfNetworking 2.0 发布问题

Posted

技术标签:

【中文标题】AfNetworking 2.0 发布问题【英文标题】:AfNetworking 2.0 posting issue 【发布时间】:2014-10-16 18:16:27 【问题描述】:

我最近想在我的 ios 应用程序中使用 Afnetworking。同一页面使用ASIHTTPREQUEST 回复我。但它根本不与 AFNetworking。这是我的努力。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *params = @@"user[height]": @"10",
                             @"user[weight]": @"255";
    [manager POST:@"http://localhost:8888/TestingPost/post.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"JSON: %@", responseObject);
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);
    ];

现在我尝试了许多选项,例如将序列化添加到不同的 xml/json/html。但没用。

在 PHP 页面上,我并没有做一些花哨的事情,只是打印出页面上发布的任何内容。它还在。

<?php
// Show all information, defaults to INFO_ALL

header('Content-type: application/JSON');



print_r($_POST[]);
/*
$first_name = $_POST["first_name"];
$last_name = $_POST["last_name"];
$password = $_POST['password'];
*/

//echo( "hurray");

?>

你能解释一下吗?我想从 ASIhttprequest 切换到最新的和更多的支持。

这是请求的结果

Networking_example[1777:41979] Error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo=0x7f9feae16d60 com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7f9fedb029a0>  URL: http://localhost:8888/TestingPost/post.php   status code: 500, headers 
    Connection = close;
    "Content-Length" = 0;
    "Content-Type" = "text/html";
    Date = "Thu, 16 Oct 2014 18:08:08 GMT";
    Server = Apache;
    "X-Powered-By" = "PHP/5.5.10";
 , NSErrorFailingURLKey=http://localhost:8888/TestingPost/post.php, com.alamofire.serialization.response.error.data=<>, NSLocalizedDescription=Request failed: internal server error (500)

【问题讨论】:

顺便说一句,您的 PHP a 指定了一个 JSON 标头(我认为应该是 application/json),但不返回 JSON。要么将其更改为返回 JSON,要么更改该标头(例如 application/text)。 【参考方案1】:

如果您的 PHP 使用 $_POST,这意味着您可以使用默认的 requestSerializerAFHTTPRequestSerializer(即 application/x-www-form-urlencoded 请求)。

但是您的 JSON 不是生成 JSON 响应,因此您必须将 responseSerializer 更改为 AFHTTPResponseSerializer

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

您的 PHP 页面报告了 500 错误。这是一个“内部服务器错误”,the status code definition 表示:

服务器遇到了一个意外情况,导致它无法完成请求。

这表明 PHP 错误。也许您打算:

print_r($_POST);

一般情况下,与Web服务交互时,最好生成JSON响应,例如

echo(json_encode($_POST));

显然,如果您生成 JSON 响应,您可能还想使用默认的 [AFJSONResponseSerializer serializer] 设置,而不是将其更改为 AFHTTPResponseSerializer

【讨论】:

但同一页面适用于 ASIhttpRequest。如果网页中有问题,它也不应该在该库上工作。我会试试这个并相应地更新 顺便说一句,您可以使用 Charles 观察您的 ASI 请求,然后使用 AFNetworking 重复此操作。通过这种方式,您将能够确定两个请求的不同之处。

以上是关于AfNetworking 2.0 发布问题的主要内容,如果未能解决你的问题,请参考以下文章

[AFN]AFNetworking错误总结

AFN3.0封装

AFN2.0到3.0的迁移

iOS开发之AFN的基本使用

AFNetWorking 网络请求转载

AfNetworking 2.0 发布问题