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取代。