AFNetworking使用遇到的问题总结

转自:http://blog.csdn.net/lqq200912408/article/details/50520631

  1. The data couldn’t be read because it isn’t in the correct format
    最近一个项目,在请求接口时,一直有问题,使用get请求可以正常请求到数据,而post则无法获取数据
    控制台输出:
http://192.168.69.121:8080/artboss-webapp/ios/checkcode  
 params:{  
    "user_phonenumber" = 185****0925;  
}  
 errorInfos:The data couldn’t be read because it isn’t in the correct format. 

大意就是数据格式不对,无法读取!后台也接收不到我传递的参数;
使用Charles抓包会发现是这样的信息:

HTTP Status 400 - Request String parameter 'user_phonenumber' is not present 

400 Bad Request!


我一看是非法的网络请求,以为是我的问题,就一直在我这边找原因,最后才发现,这是因为我发送请求时发送的字符串,和后台需要的字符串格式不一致,发送请求时,后台需要的是text文本格式,而我发送的是json格式,导致后台无法识别,接收不到数据!
后来发现我所用的封装类里的请求头,有如下设置:

[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];  
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

即,默认是使用json传输数据的!
把第二个注释掉,即使用默认的Content-Type,
并在发送请求时设置发送的字段为文本格式,即:

manager.requestSerializer = [AFHTTPRequestSerializer serializer];  

本以为会解决问题,但事实还是请求不到数据!!
最后不得已使用原生的AFNetworking进行测试,post正常拿到了数据,后来对比两者的区别,除了上面的改动以外,请求返回的数据也要改为文本,即:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];  

这样才正常拿到了数据!!总之,此次网络请求的异常,是由于请求和响应的文本格式没有统一,导致参数无法正常传递,数据无法正常读取!不过,竟然不知json传输,我也是醉了...

  1. Invalid parameter not satisfying: body

在使用AFNetworking进行传图操作的时候,出现了这个crash信息:模拟器运行后控制台输出:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: body'  
*** First throw call stack:  
(  
    0   CoreFoundation                      0x0000000107ad4e65 __exceptionPreprocess + 165  
    1   libobjc.A.dylib                     0x0000000106c1edeb objc_exception_throw + 48  
    2   CoreFoundation                      0x0000000107ad4cca +[NSException raise:format:arguments:] + 106  
    3   Foundation                          0x000000010431d4de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198  
)  
libc++abi.dylib: terminating with uncaught exception of type NSException  

真机的话会输出如下信息:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: body'  
*** First throw call stack:  
(0x225e62eb 0x21db2dff 0x225e61c1 0x22dbcd3b 0x1b8d3f 0x1b8981 0x1909f1 0x1b4a6b 0x1a1be9 0x1906c1 0x176535 0x177171 0x193371 0x18f5cb 0x19fbb9 0x8dfcbf 0x8dfcab 0x8e4771 0x225a8fc5 0x225a74bf 0x224f9bb9 0x224f99ad 0x23773af9 0x267e5fb5 0x118b11 0x221ac873)  
libc++abi.dylib: terminating with uncaught exception of type NSException  
(lldb)  

而且crash的地方也不一样:
模拟器crash到自动释放池



真机的话carsh到AFN的底层:


其实,最主要的信息就是:Invalid parameter not satisfying: body (无效的参数:body)
问题就出在body这个参数上,模拟器上看不出什么头绪,请求参数中也没有body这个参数;但是在真机上的crash信息可以看出一些头绪:他是crash到了这个方法里

- (void)appendPartWithHeaders:(NSDictionary *)headers  
                         body:(NSData *)body  
{  
    NSParameterAssert(body);  
  
    AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init];  
    bodyPart.stringEncoding = self.stringEncoding;  
    bodyPart.headers = headers;  
    bodyPart.boundary = self.boundary;  
    bodyPart.bodyContentLength = [body length];  
    bodyPart.body = body;  
  
    [self.bodyStream appendHTTPBodyPart:bodyPart];  
}  

可以看到body的类型是NSData,而设置的请求参数中,只有要发送的照片数据是NSData类型,是不是照片的问题呢?进到AFN的底层可以发现,AFN上传图片主要是用到了这个方法:

- (void)appendPartWithFileData:(NSData *)data  
                          name:(NSString *)name  
                      fileName:(NSString *)fileName  
                      mimeType:(NSString *)mimeType  
{  
    NSParameterAssert(name);  
    NSParameterAssert(fileName);  
    NSParameterAssert(mimeType);  
  
    NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary];  
    [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"];  
    [mutableHeaders setValue:mimeType forKey:@"Content-Type"];  
  
    [self appendPartWithHeaders:mutableHeaders body:data];  
}  

在这个方法里调用了

[self appendPartWithHeaders:mutableHeaders body:data]; 

正是,程序crash的地方;
其实,打断点调试后也能发现传入的照片数据为nil,问题的根源找到了,问题也就解决了!!!

如果这篇文章对您有些许帮助 请给我点个心哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 1. 使用 BaseURL 发送请求, 丢失地址路径 在维护网络请求的 API 时, 一般都是使用 “baseUR...
    流火绯瞳阅读 9,220评论 1 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,590评论 0 15
  • 二零一四年二月二十三日,雾都灰蒙蒙,我迎来了自己的第二十四个生日。这个日子对我来说是特别的,然而这个日子是以一种很...
    电童阅读 278评论 0 1
  • 有三只蚂蚁,想从广州火车站飞到北京去,其中一只蚂蚁很勤奋,想到就做,然后不停的爬啊爬,1个月后,一只蚂蚁飞到了浙江...
    福利福利阅读 186评论 2 3