iOS的基础网络编程
2016-04-27 14:08
330 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/f932565568/article/details/51260709
4.NSURLSessionConfiguration用于配置创建Session的类型,总共有三个类型: (1).deafaultSessionConfiguration用于创建默认类型的Session对象, (2).ephemeralSessionConfiguration创建临时类型的Session对象 (3).backgroundSessionConfiguration:(NSString *)identifier用于创建后台Session对象
网络请求的基本流程:
GET代码:
POST代码:
上传任务:
如有错误请指出
首先在进行网络编程时我们要对HTTP协议有一定的了解。HTTP协议,全称“超文本传输协议”,浏览器和服务器之间的通信规则,HTTP协议永远都是客户端发起请求,服务器回送响应。客户端发送一个请求,是向服务器提交一个请求包,服务器收到请求后,会向客户端回应一个响应包。HTTP的请求包由两部分组成:请求头和请求体。同理响应包也有响应头和响应体。服务器是通过响应包将数据发送给客户端,数据主要在响应包得响应体中,响应头中有相应的数据的类型以及状态码。HTTP常见的请求方式有两种,一种是GET请求,是向服务器索取数据的一种请求方式,只有请求头,另外一种是POST请求,是向服务器提交数据的一种方式请求方式,有请求头和请求体。
讲完了HTTP的相关知识,现在给大家讲一下接下来要用到的类。
1.NSURLRequest 用于储存客户端发送给服务器的数据包信息和请求设置,因为其基本设置选项较少所以我们一般使用其子类:NSMutableURLRequest。
2.NSURLResponse用于储存服务器返回的响应包数据,如果发送的是HTTP请求,那么使用其子类:NSHTTPURLResponse
3.NSURLSession指的是一个网络会话(session),一个网络会话可以发起多个任务(Task),一个任务对应了一次网络请求。
Task有三种类型: (1).NSURLSessionDataTask:数据任务,擅长处理小且频繁的应用程序之间的请求。 (2).NSURLSessionUploadTask:上传任务,以文件的形式发送数据,可以在 程序没有运行时进行后台上传。 (3).NSURLSessionDownloadTask:下载任务,以文件的形式接受数据,可以在程序没有运行时进行后台下载。4.NSURLSessionConfiguration用于配置创建Session的类型,总共有三个类型: (1).deafaultSessionConfiguration用于创建默认类型的Session对象, (2).ephemeralSessionConfiguration创建临时类型的Session对象 (3).backgroundSessionConfiguration:(NSString *)identifier用于创建后台Session对象
网络请求的基本流程:
使用NSURLSession进行网络请求的流程:
1.构造NSURL
2.构造NSURLRequest请求对象
3.构造NSURLSession会话对象
4.创建网络请求任务:dataTask, downloadTask, uploadTask
5.发送网络请求
GET代码:
//请求网址 NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"]; //设置request属性 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"GET"; request.timeoutInterval = 60; //创建session,默认是多线程 NSURLSession *session = [NSURLSession sharedSession]; //设置任务及其回调的Block NSURLSessionDataTask *dataTsk = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (error) { NSLog(@"请求出错:%@",error); return; } NSError *jsonError = nil; //获取响应的数据 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError]; //打印响应的数据 NSLog(@"%@",dic); [_textView performSelectorOnMainThread:@selector(setText:) withObject:[NSString stringWithFormat:@"%@", dic] waitUntilDone:YES]; }]; //开始任务 [dataTsk resume];
POST代码:
NSURL *url = [NSURL URLWithString:@"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; //如果60S不响应就退出 request.timeoutInterval = 60; //设置请求体 NSData *bodyData =[@"cinema_id=1533" dataUsingEncoding:NSUTF8StringEncoding]; request.HTTPBody = bodyData; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSString *jsonString = [NSString stringWithFormat:@"%@",dic]; //转换类型 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; //打印状态码 NSLog(@"状态设计:%li",httpResponse.statusCode); //打印响应头 NSDictionary *responseHeader = httpResponse.allHeaderFields; NSLog(@"响应头:%@",responseHeader); }]; [dataTask resume]
下载任务:
NSURL *url = [NSURL URLWithString:@"http://dlsw.baidu.com/sw-search-sp/soft/bf/35013/Baidu_Setup_1959_2.2.0.1452_10000010.1449569847.exe"]; //设置Configs属性 NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; //这儿可以使用代理方法检测下载任务 session = [NSURLSession s 4000 essionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]]; downloadTask = [session downloadTaskWithURL:url]; [downloadTask resume];
上传任务:
NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/2/statuses/upload.json"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;charset = utf-8;boundary=%@", Boundary]; [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; NSString *path = [[NSBundle mainBundle] pathForResource:@"upload_pic" ofType:@"jpg"]; NSData *imageData = [NSData dataWithContentsOfFile:path]; //自定义的请求体方法 NSData *boadyData = [self bulidHTTPBodyData:imageData]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:boadyData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSLog(@"error:%@", error); NSLog(@"上传图片至微博成功:%@", response); }]; [uploadTask resume];
相关文章推荐
- iOS编程基础-OC(十一)-Foundation框架中的系统服务:网络、应用及文件系统服务
- iOS开发网络—01网络编程基础
- iOS基础之网络编程问题集
- iOS开发之网络编程基础
- iOS 网络编程基础
- iOS开发之网络编程--1、AFNetwork 3.x 的所有开发中常用基础介绍
- iOS网络编程开发—网络编程基础
- iOS开发网络-网络编程基础
- Objective-C ,ios,iphone开发基础:http网络编程
- Objective-C ,ios,iphone开发基础:http网络编程
- 用Netty开发中间件:网络编程基础
- linux 网络管理基础 OSI ISO IOS的区别
- 网络编程基础(1)
- [iOS]网络编程专题:Reachability的使用
- iOS网络编程-配置iCloud-图文解说
- iOS网络编程之NSStream
- 网络编程基础(3) : IO多路复用(单线程)
- Java基础-网络编程(自定义浏览器-Tomcat服务端)
- Java套接字实现网络编程之基础篇(1)