项目中用AFN处理网络请求遇到415错误问题

由于后台是java写的,可能是原来接触的是PHP编写的后台,自己也没太注意,iOS小白表示不懂这两门语言的不同之处,因此网络请求也按照老套路请求,然而最近项目遇到AFN请求数据报415错误,下面是解决的过程:
a. 错误提示

error=ErrorDomain=com.alamofire.error.serialization.response Code=-1001"Request failed: unacceptable content-type: text/html"UserInfo=0x7fdfd8729680{com.alamofire.serialization.response.error.response= { URL:http://172.16.1.31:7001/itom/getwork } { status code: 415, headers{
"Cache-Control" = "no-cache";
"Content-Type" = "text/html;charset=UTF-8";
Date= "Mon, 24 Nov 2014 03:13:16 GMT";
"Transfer-Encoding" = Identity;
"X-Powered-By" = "Servlet/2.5 JSP/2.1";
} },NSErrorFailingURLKey=http://172.16.1.31:7001/itom/getwork,com.alamofire.serialization.response.error.data=<5b7b227374617475 73223a22 73756363 65737322 2c226d73 67223a22 e799bbe99986e688 90e58a9f 227d5d>, NSLocalizedDescription=Requestfailed: unacceptable content-type: text/html}

b.通常解决方法是:对应到自己的项目里面,我用的是AFNetworking这套网络请求包,需要改的是:AFURLResponseSerialization.m文件223行:

self.acceptableContentTypes =[NSSetsetWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", nil];

绝大多数数情况下这样是可以解决的,然并卵,我试了还是没解决,只有是另一种

c. 第二种其实和第一种一样,就是在实例化AFHTTPSessionManager的时候通过实例后的对象

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

添加所需的类型,然而结果一样并没有解决问题,抱着不解决不死心的信息各种Google,度娘,等等,因此有了第三种方法

d.第三种是在实例化AFHTTPSessionManager后通过对象设置

manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

并且按照第一或者第二种方式添加类型,问题到此也就解决了。ps:AFJSONRequestSerializer是集成自AFHTTPSessionManager,具体还不知道这样做的原因,欢迎聊了的大牛讲讲其中的原理。

你可能感兴趣的:(项目中用AFN处理网络请求遇到415错误问题)