iOS学习iOS学习程序员

关于iOS网络基础

2017-01-26  本文已影响398人  MiracleGl

网络基本概念

URL和HTTP协议

请求和响应(★★★)

HTTP协议规定:一个完整的由客户端发给服务器的HTTP请求需要包含以下内容:请求行、请求头、请求体(可选)

* 请求行:指定请求方法、请求资源路径以及`HTTP协议版本`
    * `GET / HTTP/1.1`:GET / 后面的 / 表示访问根目录
* 请求头:对客户端的环境描述、客户端请求的主机地址等信息.至少包含以下信息
* 请求体:客户端发给服务器的具体数据,例如要上传的文件数据
    * `GET请求没有请求体`
    * `POST请求有请求体.告诉服务器一些类似于用户名和密码的信息.比如注册和登陆`
* 请求格式
    * 每一项请求信息末尾使用 `\r\n`
    * 最后一个请求项末尾使用 `\r\n\r\n` 表示请求结束

HTTP协议规定:一个完整的HTTP响应包含以下内容:状态行、响应头、响应体。

* 状态行:包含了`HTTP协议版本`、`状态码`、`状态英文名称`
* 响应头:服务器告诉客户端一些信息。包含了`对服务器的描述`、`对返回数据的描述`
* 响应体:`服务器返回给客户端的二进制数据`

网络开发方案

NSURLConnection(★★)

```

// 1. URL
NSURL *URL = [NSURL URLWithString:@"http://www.baidu.com"];

// 2. 请求(request)
NSURLRequest *request = [NSURLRequest requestWithURL:URL];

// 3. 异步发送请求
/*
 参数1 : 请求对象
 参数2 : 队列;`completionHandler`的回调队列;
        如果想在回调里面刷新UI,选择主队列;反之,可以任意选择
 参数3 : 得到服务器的响应之后的回调
 提示 : `sendAsynchronousRequest` 默认就是在子线程异步执行的
 */
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
    
    // response : 响应头
    // data : 响应体
    // connectionError : 错误信息
    
    // 4. 处理响应 : 错误处理 (开发中一定要做)
    if (connectionError == nil && data != nil) {
        NSLog(@"%@ -- %@",response,data);
        
    } else {
        NSLog(@"%@",connectionError);
    }
}];

```

// NSLog(@"%@ -- %@",response,data);

        // 提示 : 服务器返回给客户端的原始数据是二进制的,客户端无法直接使用的;
        // 需要把二进制转换成客户端可以直接使用的OC对象;这个过程叫做反序列化 / 数据解析;
        NSString *html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

// NSLog(@"%@",html);

        // 把html格式的字符串展示在网页上
        [self.webView loadHTMLString:html baseURL:URL];
        
    } else {
        NSLog(@"%@",connectionError);
    }
}];

``` 

* 反序列化:`服务器返回给客户端的是二进制数据,客户端没法直接使用.将二进制数据转换成OC对象 (字符串 字典 数组) 的过程叫做反序列化,也叫作数据解析`
![](http://ww4.sinaimg.cn/mw690/ad98b285jw1fbur4zgc79j20te0m8afh.jpg)

NSURLSession(★★★)

// 1.URL : 使用本地服务器的数据做测试
    NSURL *URL = [NSURL URLWithString:@"http:xxxxxxxxxxx"];
    
    // 2.获取session(单例)
    NSURLSession *session = [NSURLSession sharedSession];
    
    // 3.session发起任务(task)
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:URL completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
        // 5.处理响应 : 错误判断
        if (error == nil && data != nil) {
            
            // 反序列化...解析json
            id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
            NSLog(@"%@ -- %@",[result class],result);
            
        } else {
            NSLog(@"%@",error);
        }
    }];
    
    // 4.启动任务
    [dataTask resume];

网络通信三要素


感谢读到最后的朋友,最后祝大家新年快乐,请点赞支持一下,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读