原来公司项目进行网络请求的时候用的是ASI,笔者最近将公司项目的网络请求方式换成了AFN,后台是Java写的,但是在更换的过程中出现问题了。
笔者用CocoaPod导入AFN3.0,用的是post第一种请求方式,代码如下
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 10;//网络请求超时为5s
manager.responseSerializer = [AFJSONResponseSerializer serializer];
NSDictionary *parameters = @{@"time":@"2016-04-01",@"token":@"sfwefwefwehbfwk"};
// 结果返回
[manager POST:@"http://test.52.com:8004/Clientuser/app_token?" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
在测试的过程中,只能访问到http://test.52.com:8004/Clientuser/app_token?
,后台无法获取到time
和token
两个参数。在解决问题的过程中,发现有其他的开发者在使用AFN3.0的时候也遇到了这个问题,采取的方式是将post请求更换成下面的方式
[manager POST:@"http://test.52.com:8004/Clientuser/app_token?" parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
这样就完美的解决了参数获取不到的问题。
第一种post方式是上传文件的请求方式,第二种是普通的请求数据的方式,笔者原本认为第一种请求方式只是增加了上传功能不会有其他的影响,所以二次封装的时候就用第一种封的,问题就出现了,希望大家不要和笔者犯类似的错误。
至于为什么会出现这样的问题,如果有读者知道请告知笔者,笔者搞清楚后会补充说明。
最后贴上AFN3.0.4的使用方式iOS开发之AFNetworking 3.0.4使用