iOS的基础网络编程

如有错误请指出


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值