原生网络请求NSURLSession的应用
iOS9.0后,官方推出了NSURLSession用来替代NSURLConnection来实现网络请求。这里我们就介绍一下NSURLSession的简单应用。
1、GET请求
NSURLSession *session = [NSURLSession sharedSession];
NSString*urlStr = @"https://XXX";
NSURL*url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod=@"GET";//设置请求方式
request.timeoutInterval=15;//设置超时时间
[requestsetValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];//设置请求头类型
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
request.HTTPBody= jsonData;//设置消息体
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//解析数据 返回json解析
if(data) {
NSDictionary *responsedict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
}];
[dataTask resume];
2、POST请求
把 HTTPMethod设置为POST即可
request.HTTPMethod=@"POST";//设置请求方式
下面介绍Content-Type几种值的区别及用法
1、Content-Type常用的的类型有
1.1 application/json:消息主体是序列化后的JSON字符串
1.2 application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式
1.3 text/plain:数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。
2、实际应用中常用的几种用法
2.1 application/json:请求主题为json格式的字符串,服务器端会对json字符串进行解析,大多数都是用此类型
2.2 application/x-www-form-urlencoded:服务端要求以键值对key1=value1&key2=value2方式上传消息体。需要设置成此模式
此时客户端需要对上传的消息体做转换处理。参考如下
NSString *keyValueFormat;
NSMutableString *result = [NSMutableString new];
NSEnumerator *keyEum = [parameters keyEnumerator];
idkey;
while(key = [keyEum nextObject]) {
keyValueFormat = [NSStringstringWithFormat:@"%@=%@&",key,[parameters valueForKey:key]];
[result appendString:keyValueFormat];
}
NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];