AFNetworking:如何在失败时获取响应字符串?

时间:2015-03-12 09:42:15

标签: ios afnetworking

我正在使用

- (AFHTTPRequestOperation *)GET:(NSString *)URLString
                 parameters:(id)parameters
                    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

与服务器通信,效果很好。

但有时,服务器上出现错误,而且它的响应不是json格式。我的搭档希望我显示错误字符串,但由于它进入了故障块,我很难得到原始的响应字符串。

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:5)

您可以在成功时记录operation.responseString行,并且阻止两者都获取服务器的响应字符串。

如果webservice出现某种错误并提供无效的json或响应,请在失败块中记录[error description]

如需参考,请查看以下代码段。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setTimeoutInterval:120];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
[manager POST:[[NSString stringWithFormat:@"%@",URL]stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] parameters:parameters 
     success:^(AFHTTPRequestOperation *operation, id responseObject) 
     {
       NSLog(@"Response: %@", operation.responseString);  
     } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
     {
       NSLog(@"Error: %@ \n %@", operation.responseString,[error description]);
     }];

答案 1 :(得分:0)

在故障区块中,添加以下代码:

NSDictionary *userInfo = [error userInfo];
NSString *message = [userInfo objectForKey:@"message"];

我认为消息是您所需要的,您可以使用NSLog来显示信息。

答案 2 :(得分:0)

要获取错误代码(响应代码),您可以使用[operation.response statusCode];

错误明细应该在这里

id responseObject = error.userInfo[kErrorResponseObjectKey];

来自:http://www.splinter.com.au/2014/09/10/afnetworking-error-bodies/