如何使用 AFNetworking 2.0 处理 Parse.com Rest API 错误

Posted

技术标签:

【中文标题】如何使用 AFNetworking 2.0 处理 Parse.com Rest API 错误【英文标题】:How to handle Parse.com Rest API error with AFNetworking 2.0 【发布时间】:2014-07-14 10:21:00 【问题描述】:

我正在处理在我的 ios 应用程序中执行登录时从 Parse.com 收到的错误。我尝试使用 AFNetworking 使用错误的密码和正确的用户名登录

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @my parameters;
[manager POST:@"login url" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    code
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error.localizedDescription);  <-- this line gets processed
];

日志说

Request failed: not found (404)

我知道这意味着密码错误,但它不应该更具描述性吗?如何处理其他错误(如错误请求)?用户不应该知道为什么请求失败或者是一个错误的请求吗?

编辑: 这是我尝试使用错误密码登录时 Parse 的响应


AFNetworkingOperationFailingURLResponseErrorKey = "<NSHTTPURLResponse: 0x15571820>  URL: https://api.parse.com/1/login?password=pqpqpq&username=lalala%20namaku%20panjang%20sekali%20lhoooooooooooo   status code: 404, headers \n    \"Access-Control-Allow-Origin\" = \"*\";\n    \"Access-Control-Request-Method\" = \"*\";\n    Connection = \"keep-alive\";\n    \"Content-Encoding\" = gzip;\n    \"Content-Length\" = 68;\n    \"Content-Type\" = \"application/json; charset=utf-8\";\n    Date = \"Wed, 16 Jul 2014 05:49:49 GMT\";\n    Server = \"nginx/1.4.4\";\n    \"X-Parse-Platform\" = G1;\n    \"X-Runtime\" = \"0.113695\";\n ";
NSErrorFailingURLKey = "https://api.parse.com/1/login?password=pqpqpq&username=lalala%20namaku%20panjang%20sekali%20lhoooooooooooo";
NSLocalizedDescription = "Request failed: not found (404)";

我怎么知道这意味着没有找到匹配用户名和密码的 User 对象,或者没有找到 URL (https://api.parse.com/1/login?password=pqpqpq&username=lalala%20namaku%20panjang%20sekali%20lhoooooooooooo)?

【问题讨论】:

为什么不使用原生 iOS SDK,因为它已经为您完成了,您不需要关心 AFNetworking 以及正确构建和解码 URL ?它可以很容易地通过 cocoapods 安装... 它没有回答我的问题。如何处理 Parse.com 提供的模棱两可的错误代码?我的意思是,404 可能意味着找不到 url 对吗? 【参考方案1】:

即使返回 http 代码 404,body 也是以 json 形式设置的,比如 "code":101,"error":"无效的登录参数",

( 例如此处列出的值 http://parse.com/docs/dotnet/api/html/T_Parse_ParseException_ErrorCode.htm ) 。由于代码没有列出确切的 url 以及您如何设置标题,因此很难判断出了什么问题 否则在这里。 你可以去https://parse.com/docs/rest#users-login查看CURL的代码示例,它会告诉你如何调用登录url,它通常会响应JSON错误描述。

您还可以检查如何从AFNetworking 2.0 AFHTTPSessionManager: how to get status code and response JSON in failure block? 的 HTTP 404 获取正文

【讨论】:

我编辑我的问题。我记录 userInfo 并得到它作为回报。

以上是关于如何使用 AFNetworking 2.0 处理 Parse.com Rest API 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 2.0 对请求进行分组或批量处理

AFNetworking 2.0 - 是不是使用子类?

AFNetworking 2.0 响应对象处理

如何在旧的 AFNetworking 中使用 AFNetworking 2.0+?

使用 AFNetworking 2.0 异常解析 JSON

如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?