iOS 网络问题
最近一直在独立负责一个项目,碰到了一些网络问题,之前一直是使用AFNetworking的,基本上所有的网络问题都能解决,刚好这个项目有几个接口使用的是不一致的请求方式,困扰了我好久。之前一直用AFN,原生的网络方法都忘光了。
我碰到的这个问题是:同一个参数可传多个值,所以参数肯定不能用字典来传参,这个的话只能传一个值,比如有一个time参数,要求传入多个时间段,如果用字典的话:@{@“time” : @"09:00-12:00"},就只能传一个值,用数组的话,我们的后台也不能识别。
后来我干脆参照AFN官网,把所有的方法都试了一遍 ,也还是不行。
URL Form Parameter Encoding
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/x-www-form-urlencoded
foo=bar&baz[]=1&baz[]=2&baz[]=3
这样出来的NSURLRequest的HTTPBody 的 转换为NSString 是 09:00-12:00 14:00- 18:00 20:00-22:00
time%5B%5D=09%3A00-1200&time%5B%5D=14%3A00-18%3A00&time%5B%5D=20%3A00-22%3A00 格式服务器无法识别
后来我单独传了一个时间段 09:00-12:00 过去 ,发现NSURLRequest的HTTPBody 的 转换为NSString 是
time=09%3A00-1200
看着两个HTTPBody, 我灵机一动, 自己写了个
NSString *timeStr =@"time=07:00-10:00&time=14:00-17:00&time=21:00-22:00&time=22:10-22:20&time=22:30-23:00";
NSData *timeData = [timeStrdataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = timeData;
然后就TM成功了!!!!! 这个方法我用的是官方的网络请求方法。
完整代码如下:
NSString *URLStr = [NSStringstringWithFormat:@"%@/mobile/expert/time/setting",kBaseURL];
/*
NSDictionary *parameters = @{@"time" : @[@"09:00-1200", @"14:00-18:00", @"20:00-22:00"]};
AFN 转换之后HTTPBody -> time%5B%5D=09%3A00-1200&time%5B%5D=14%3A00-18%3A00&time%5B%5D=20%3A00-22%3A00 格式服务器无法识别
*/
// NSDictionary *parameters =@{@"time" :@[@"09:00-1200",@"14:00-18:00", @"20:00-22:00"]};
//AFN的方法
// NSMutableURLRequest *realRequest = [[AFHTTPRequestSerializer serializer]requestWithMethod:@"POST" URLString:URLStr parameters:parameters error:nil];
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:[NSURLURLWithString:URLStr]];
//头部参数 token
NSString *token = [MCFunctionreadUserLoginInfo][@"token"];
[request setValue:tokenforHTTPHeaderField:@"X-session-token"];
request.HTTPMethod = @"POST";
// NSData *data = realRequest.HTTPBody;
// NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
// MCLog(@"%@",str);
NSString *timeStr =@"time=07:00-10:00&time=14:00-17:00&time=21:00-22:00&time=22:10-22:20&time=22:30-23:00";
NSData *timeData = [timeStrdataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = timeData;
NSOperationQueue *queue = [[NSOperationQueuealloc]init];
[NSURLConnectionsendAsynchronousRequest:request
queue:queue
completionHandler:^(NSURLResponse *response,NSData *data, NSError *error){
if (error) {
NSLog(@"Httperror:%@%ld", error.localizedDescription,(long)error.code);
}else{
NSInteger responseCode = [(NSHTTPURLResponse *)responsestatusCode];
NSString *responseString = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"HttpResponseCode:%ld", (long)responseCode);
NSLog(@"HttpResponseBody %@",responseString);
}
}];
上班时间匆匆写的,格式不好,将就将就哈。