iOS 网络问题
来源:互联网 发布:在淘宝买手机是真品吗 编辑:程序博客网 时间:2024/05/16 00:35
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-urlencodedfoo=bar&baz[]=1&baz[]=2&baz[]=3
这样出来的NSURLRequest的HTTPBody 的 转换为NSString 是 09:00-12:00 14:00- 18:00 20:00-22:00time%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);
}
}];
上班时间匆匆写的,格式不好,将就将就哈。
- iOS 网络问题
- ios 网络请求问题
- IOS网络问题
- iOS 9网络联网问题
- IOS中多个网络请求问题
- ios开发网络传输数据汉字编码问题
- ios网络请求3840错误的问题
- iOS基础之网络编程问题集
- IOS网络编程发送数据的问题
- IOS网络编程发送数据的问题
- iOS多个网络请求问题
- iOS 解决10网络权限问题
- ios 网络
- iOS 网络
- iOS网络
- iOS网络
- iOS 网络
- iOS网络
- Shell编程(四)---echo、printf
- 基于TestNG 与Selenium 的自动化测试设计与实施(二)
- Fragment详解(四)Fragment生命周期
- spring3.1以上利用 ehcache进行注解配置缓存不起作用的原因
- leetcode--Best Time to Buy and Sell Stock
- iOS 网络问题
- ORACEL存储过程中声明一个可存储记录的像数据表一样的变量的简便方法。
- 总结下并行和并发的差异
- mac 定时任务
- Linux学习--rsync同步备份实现
- C#课后练习题(二)
- POJ 2236 Wireless Network
- jQuery.serialize() 函数详解
- IONIC 项目开发