iOS的基础网络编程

来源:互联网 发布:阿里云备案客服电话 编辑:程序博客网 时间:2024/05/22 03:09

如有错误请指出


首先在进行网络编程时我们要对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 sessionWithConfiguration: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];


1 0
原创粉丝点击