AFNetworking 响应格式不正确

Posted

技术标签:

【中文标题】AFNetworking 响应格式不正确【英文标题】:AFNetworking response not in proper format 【发布时间】:2017-01-31 05:21:13 【问题描述】:

我在我的项目中使用 AFNetworking 框架并通过 AFHTTPSessionManager 类访问 web 服务,如下方式,

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager.requestSerializer setTimeoutInterval:30];

NSDictionary *parametersDictionary = @
                             @"users_id":userIDStr,
                             @"name" :@""

                             ;
[manager POST:@"api/call_XAPI?"
                                      parameters:parametersDictionary
                                        progress:^(NSProgress * _Nonnull uploadProgress) 

                                        
                                         success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)                                                  
                                                                         NSLog(@"Success");                       

                                          failure:^(NSURLSessionDataTask *task, NSError *error) 
                                                                                                                     NSLog(@"%@", error);                
                                         ];

这在成功时可以正常工作,但是如果服务器中发生任何错误,则错误响应在控制台上没有以正确的格式显示

Printing description of error:
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo=com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x608000435940>  URL: http://www.example.com/api/call_XYZAPI?   status code: 500, headers 
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Type" = "application/json";
Date = "Mon, 30 Jan 2017 13:12:59 GMT";
Server = "nginx/1.10.2";
"Set-Cookie" = "laravel_session=ca9b0725b981267be1f095bb6ae14a1d5ae2825f; expires=Mon, 30-Jan-2017 15:12:59 GMT; Max-Age=7200; path=/; httponly";
"Transfer-Encoding" = Identity;
 , NSErrorFailingURLKey=http://www.example.com/api/call_XYZAPI?, com.alamofire.serialization.response.error.data = 12112,23131,31231331,312231 ..... 

谁能告诉我我做错了什么以及如何解决这个问题?

【问题讨论】:

报错,最好先检查一下邮递员是否给出完整的响应? 看到这个***.com/questions/26231780/… 您在响应中得到了哪种响应。添加该代码的某种格式。 你好@KKRocks 我已经在上面添加了Printing description of error: 是这个格式吗:12112,23131,31231331,312231 ..... 【参考方案1】:

根据this article的说法,错误500与客户端无关,应该在web服务服务器上处理。

联系您的后端开发人员并请他修复它。

【讨论】:

是的@Yogi,你是对的,我们已经解决了这个问题,但我的问题是错误响应格式不正确。 我认为你应该看看 NSHTTPURLResponse 对象的内容。大多数情况下,它具有来自服务器的更好格式的响应。我假设您需要它通过显示错误警报来让用户知道错误。 当你得到internal server error (500) 时,你打印的终端日志是ok的,不用担心。 是的@nynohu先生,我也处理了所有状态码,但我只是对错误格式感到好奇。 您可以try NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; int statuscode = response.statusCode;获取错误码

以上是关于AFNetworking 响应格式不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSON 格式解析通过 AFNetworking 1.0 获得的响应

AFNetworking 与 iOS 4.3 不兼容

AFNet3.0上传图片

AFNetworking (iOS) - 响应不是 NSDictionary

从 AFNetworking 检索错误响应

iOS 开发 把握AFNet网络请求完成的正确时机