如何使用 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 对请求进行分组或批量处理