iOS_网络请求iOS技术难点iOS学习总结

iOS基础--网络请求总结(1)(NSUConnection方法

2016-04-07  本文已影响362人  云之君兮鹏
自是人生长恨水长东
  • URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源

Hyper Transfer Protocol (超文本传输协议) 是用于万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.
工作原理: HTTP协议采用请求/响应模型. 客户端向服务器发送一个请求报文,服务器以一个状态作为响应.

安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版. HTTPS协议使用SSL在发送方和接受方通过交换共知的秘钥来实现.因此,传送的数据不容易被网络黑客截取和解密.

SSL是Netscape公司所提出的安全保密协议,在浏览器和web服务器之间构造安全通道来进行数据传输,SSL运行TCP/IP 层值上,应用层之下,为应用程序提供加密数据通道.

HTTP || HTTPS

1 : https协议需要到ca申请证书,一般免费证书很少,需要交费
2 : http是超文本传输协议,信息是明文传输,https则是具有安全性的加密传输协议
3 : http和https是用的是完全不同的链接方式,用的端口也不一样,前者是后者是443
4 : http的链接很简单,是无状态的
5 : https是协议是由SSL + HTTP 协议构建的可进行加密传输,身份认证的网络协议 要比http安全

GET&&POST.png

POST设置请求方式
GET设置Body
同步GET和POST的缺点: 会造成程序的卡顿,所以在开发中不推荐使用



//get异步实现(block和代理方法写在一起了)

//通过地址字符串,创建url

NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";    
NSURL *url = [NSURL URLWithString:urlString];  ```  
//通过url,创建请求
   
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
\#pragma mark -----block
//调用带有block回调的方法,执行网络请求
//参数 1: NSURLRequest
//参数 2: block块里面的代码在哪个线程执行
```obj
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) 
{
//respone 携带的是接口的一些信息
//data    请求下来的数据信息(需要使用的) 
//connectionError 错误信息
if (connectionError == nil) 
{     
 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];
 NSLog(@"%@",dict);
//这里应该刷新UI了
 //1 : 给数据源数组赋值 
 //2 : 赋值结束之后,刷新UI ([[self.tableView reloadData])
 //原则 : 主线程只负责更新UI 
        }
    }];```
\#pragma mark -----代理
//代理的异步网络请求(GET)
//参数 1: NSURLRequest 
//参数 2:代理

    [NSURLConnection connectionWithRequest:request delegate:self];

#// POST异步(block和代理方法写在一起了)
//通过地址字符串,创建url 
```obj
NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";    NSURL *url = [NSURL URLWithString:urlString];  
//通过url,创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];  
//因为POST通过data给服务器传输数据,所有通过string创建data 
 NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; 
NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; 
//设置请求方式 
[request setHTTPMethod:@"POST"];
//设置body,  
[request setHTTPBody:postData];```
\#pragma mark ----block
```obj
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {       
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];        NSLog(@"%@",dict);
    }];```
\#pragma mark ----代理 
``` obj
[NSURLConnection connectionWithRequest:request delegate:self];   ```

____
______

\#pragma mark  -----NSURLConnectionDataDelegate协议方法 实现
#//开始响应
- ````-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{```
//初始化保存结果的data 
self.resultData = [NSMutableData data];}
//接收到数据
//这个方法会重复的执行,所以可能拿到一段一段的数据.这就是需要我们把这些数据拼接起来
- ```- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{  ```
 //为了防止 拿到的数据不全,所以把拿到的数据拼接到保存结果的data中.   
``` [self.resultData appendData:data];}```
//结束响应
- ```- (void)connectionDidFinishLoading:(NSURLConnection *)connection{  
  //    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:(NSJSONReadingAllowFragments) error:nil];  
NSLog(@"异步代理 ---> %@",dict); ```
//更新数据源数组 
//刷新UI
}
上一篇下一篇

猜你喜欢

热点阅读