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

Ios AFNetworking:失败时如何获取响应字符串?,ios,afnetworking,Ios,Afnetworking,我正在使用 - (AFHTTPRequestOperation *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPReq

我正在使用

- (AFHTTPRequestOperation *)GET:(NSString *)URLString
                 parameters:(id)parameters
                    success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                    failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
与服务器通信,效果非常好

但有时,服务器上会出现错误,其响应不是json格式。我的合作伙伴希望我显示错误字符串,但由于它进入了故障块,我几乎无法获得原始响应字符串


任何人都可以提供帮助?

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

NSDictionary *userInfo = [error userInfo];
NSString *message = [userInfo objectForKey:@"message"];
我认为消息就是您所需要的,您可以使用NSLog来显示信息。

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

错误详细信息应该在这里

id responseObject = error.userInfo[kErrorResponseObjectKey];

参考:

您可以记录
操作。responseString
行在成功和失败块中都可以获得服务器的响应字符串

如果webservice有某种错误,并提供无效的json或响应,则在故障块中记录
[错误描述]

请查看下面的代码片段以供参考

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]);
     }];

它不起作用。responseObject为空。响应代码是200,但不是json格式。
NSString*urlStr=[NSString stringWithFormat:@”http://stackoverflow.com/"];         AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager];manager.securityPolicy.allowInvalidCertificates=是;manager.responseSerializer.acceptableContentTypes=[NSSet setWithObject:@“text/html]”;[管理器获取:urlStr参数:无成功:^(AFHTTPRequestOperation*操作,id responseObject)
{NSLog(@“responseObject:%@”,responseObject);}失败:^(AFHTTPRequestOperation*操作,NSError*错误){NSDictionary*用户信息=[错误用户信息];NSString*消息=[userInfo objectForKey:@“message”];NSLog(@“error:%@”,error);NSLog(@“message:%@”,message);id responseObject=error.userInfo[kErrorResponseObjectKey];NSLog(@“responseObject:%@”,responseObject);}];日志:
2015-03-12 18:04:05.544 AFIOS示例[37233:60b]错误:error Domain=NSCocoaErrorDomain Code=3840“操作无法完成。(Cocoa错误3840)。“(JSON文本未以数组或对象开头,允许未设置片段的选项。)UserInfo=0x17007fd40{NSDebugDescription=JSON文本未以数组或对象开头,允许未设置片段的选项。}2015-03-12 18:04:05.545 AFO网络示例[37233:60b]消息:(null)2015-03-12 18:04:05.545 AFO网络示例[37233:60b]响应对象:(null)
我需要来自服务器的原始响应字符串。结果取决于服务器,您可以记录错误或只向后端合作伙伴询问格式。只有
error Domain=NSCocoaErrorDomain code=3840“操作无法完成。(Cocoa错误3840)。”(JSON文本未以数组或对象和允许未设置片段的选项开头。)UserInfo=0x170073780{NSDebugDescription=JSON文本未以数组或对象和允许未设置片段的选项开头。}
我的后端合作伙伴希望查看响应字符串,以了解json格式错误的原因。您是否使用curl模拟请求并查看结果?仅在AFNetworking上发生?当然,curl可以工作,但编写起来非常麻烦,尤其是在有参数的情况下。太好了!这正是我想要的。非常感谢。在新的AFNetworking中,故障块中没有AFHTTPRequestOperation,这取决于您使用的AFNetworking版本。在最新的AFNetworking中,它被AFHTTPSessionManager取代。