AFNetWorking 请求每次进 failure, status code: 500

2015-07-08 10:41:15 +08:00
 sunjws
不多说,看代码

https://gist.github.com/sungys/738cd7c5b7537814e904

回调以后每次都走近failure里,查看error报错信息为
URL: [url]http://192.168.xxx.xx/homework/service/user/authorize.aspx[/url] } { status code: 500, headers {
    "Cache-Control" = private;
    "Content-Length" = 2915;
    "Content-Type" = "text/html; charset=utf-8";
    Date = "Wed, 08 Jul 2015 00:36:38 GMT";
    Server = "Microsoft-IIS/6.0";
    "X-AspNet-Version" = "2.0.50727";
    "X-Powered-By" = "ASP.NET";
}
在网上搜了很多也没有解决,求指点
5010 次点击
所在节点    iDev
11 条回复
wy315700
2015-07-08 10:43:12 +08:00
status code: 500 服务器报错了。。
sunjws
2015-07-08 10:51:17 +08:00
@wy315700 同样的接口 自己写了一个简单的代码测试后,能够正常解析出数据

//用这个方法请求接口能够正常返回数据
-(NSData *)returnDownLoadWithJsonRequestStr:(NSString *)json Url:(NSString *)url
{
//第一步,创建URL
NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"%@",url]];
//第二步,创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url1 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
//NSString *str = [NSString stringWithFormat:@"%@",json];//设置参数
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:data];
//第三步,连接服务器
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
// NSLog(@"aaaaaa = %@",received);
return received;
}
laoyur
2015-07-08 11:02:39 +08:00
自己抓包看两个请求有啥不同
hyzjshwo
2015-07-08 11:20:15 +08:00
看到192.168.xxx.xx 这样的段位,我问问是不是在外网调试?
sobigfish
2015-07-08 11:25:55 +08:00
500肯定先查服务端,你先把两个(AFNetWorking和自己写的)请求都直接dump出来看看区别 而且两个请求的格式都不一样 text/html application/json
jianzong
2015-07-08 12:23:00 +08:00
可以先用postman确定是不是api服务器的问题
dorentus
2015-07-08 12:25:42 +08:00
gist 里面的 Request:
- Content-Type 没设置
- 设置了 Accept: text/html (但是这不合理,因为后面的代码里面明显可以看出你要的是 application/json 的返回数据)
- paramRequest 这个 Dictionary 是用表单参数的方式序列化为 POST body 来提交的

下面你手写的代码:
- Content-Type 设置成了 application/json
- Accept 没有设置
- paramRequest 这个 Dictionary 是序列号成 JSON 格式的字符串然后直接作为 POST body 提交的

----
前两点不同,取决于你服务端的设置,可能会导致出错,也可能不出错
第三点,直接导致你服务端收到的数据是完全不一样的;看起来,你的服务端期待的是 POST body 直接是 JSON 格式这种形式。
pupboss
2015-07-08 12:25:52 +08:00
AFN 默认不支持 text/html,找到之后添加上就好了,估计是这个原因
PopeyeLau
2015-07-08 12:55:00 +08:00
`self.responseSerializer.acceptableContentTypes =[NSSet setWithObjects:@"text/html", @"application/json",nil];`
sunjws
2015-07-08 13:29:59 +08:00
@dorentus 对,服务端期待的是POST body 直接是 JSON 格式这种形式。那么请教一下用AFN该怎么配置呢
dorentus
2015-07-08 15:22:21 +08:00
@sunjws 设置一下 requestSerializer 应该就可以了
_sharedClient.requestSerializer = [AFJSONRequestSerializer serializer];

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/204149

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX