码迷,mamicode.com
首页 > 其他好文 > 详细

网络解析

时间:2016-04-07 20:58:39      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

请求方式 : 

1. GET

 (1) 通过网址字符串给服务器传输数据

 (2) 传输数据网址字符串最大255字节

 (3) 安全性 : 所有传输给服务的数据, 显示在网址里, 类似于密码的铭文输入, 直接可见

2. POST

 (1) 通过data给服务器传输数据

 (2) 传输数据使用NSData,容量超过1G

 (3) 数据被转成NSData ( 二进制数据 ),类似于密码的密文输入, 无法直接读取

同步GET 和 同步 POST 异同

同步GET : 

1. 创建一个地址字符串, 注意 : 不能有空格

2. 创建一个统一资源定位符

3. 创建一个NSURLRequest, 并配置缓存策略和超时时间

4. 通过一个NSData对象获取网络请求数据

同步POST :

1. 创建一个地址字符串, 注意 : 不能有空格

2. 创建一个统一资源定位符

3. 使用NSMutableURLRequest :  因为之后要对request做修改

4. 创建一个上传数据的字符串, 并且转成NSData对象

5. 设置请求方式

6. 设置上传的Data

7. 通过一个NSData对象获取网络请求数据

 

缺点 : 会造成程序的卡顿, 所以在开发时候不推荐使用 !

 

-- 代码实现 同步 异步 GET POST (代理 , block 两种方式 (推荐使用 block) )

 

#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate>

@property (nonatomic, strong) NSMutableData *resultData;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
//get同步
// 开发中 不推荐使用同步网络请求
- (IBAction)getT:(id)sender {
    //地址字符串
    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";
    //统一资源定位符(URL)
    NSURL *url = [NSURL URLWithString:urlString];
    // 第一个参数 : 统一资源定位符
    // 第二个参数 : 缓存策略
    // 第三个参数 : 超时时间
    /**
     NSURLRequestUseProtocolCachePolicy : 基础缓存策略
     
    *常用 NSURLRequestReloadIgnoringLocalCacheData : 忽略本地缓存
     
     NSURLRequestReloadIgnoringLocalAndRemoteCacheData : 忽略本地缓存, 无论本地是都有缓存, 都从网络下载
     
     NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData : 如果本地缓存有效, 则不下载, 无效则去下载
     
    *常用 NSURLRequestReturnCacheDataElseLoad : 优先的使用本地缓存, 如果本地没有缓存, 则去下载
     
     NSURLRequestReturnCacheDataDontLoad : 从不下载, 只使用本地缓存, 如果没有则请求失败. 多用于离线环境
     
    *最常用 NSURLRequestReloadRevalidatingCacheDataUnimplemented : 验证本地数据和网络数据是否相同, 如果不同, 则去下载, 如果相同, 则使用本地数据

     */
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0f];
    
    //NSURLConnection 在iOS9.0之后 不推荐使用
    // 第一个参数 : NSURLRequest类型的对象
    // 第二个参数 : 存储的是一些网略请求的信息, 一般为nil(包体)
    // 第三个参数 : 错误信息
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    
    NSLog(@"dic == %@", dic);
}
//post同步
- (IBAction)postT:(id)sender {
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    
    NSURL *url = [NSURL URLWithString:urlString];
    
    NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
    //创建一个字符串
    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    //把这个字符串转换成NSData类型的对象
    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    //设置请求方式 方式为大写的 如 : POST GET
    //GET请求可以不设置, 但是POST请求必须要设置
    [urlRequest setHTTPMethod:@"POST"];
    //把需要上传的data放进request里面
    [urlRequest setHTTPBody:postData];
    
    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"dic == %@", dic);
}
//get异步
- (IBAction)getY:(id)sender {
    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];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    
    //代理的异步网络请求 (GET)
    //第一个参数 : NSURLRequest
    //第二个参数 : 代理人
    [NSURLConnection connectionWithRequest:request delegate:self];
    
    //调回带有block回调的方法, 执行网络请求
    // 第一个参数 : NSURLRequest
    // 第二个参数 : block块里面的代码在哪个线程执行
//    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//        
//        //response 携带的是接口的一些信息
//        //data 请求下来的数据, 需要使用的
//        //connectionError 错误信息
//        if (connectionError == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//            //这里应该刷新UI了
//            //1. 给数据源数组赋值
//            //2. 赋值结束之后, 刷新UI ([self.tableView reloadData])
//        }
//    }];
    
}

//post异步
- (IBAction)postY:(id)sender {
    
    
    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
    NSURL *url = [NSURL URLWithString:urlString];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];
    
    [NSURLConnection connectionWithRequest:request delegate:self];
    
//    NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx";
//    NSURL *url = [NSURL URLWithString:urlString];
//    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//    NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
//    NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
//    [request setHTTPMethod:@"POST"];
//    [request setHTTPBody:postData];
//    
//    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
//        if (connectionError == nil) {
//            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//            NSLog(@"dic == %@", dic);
//        }
//    }];
    
    
    
}

#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 *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
    
    NSLog(@"dic == %@", dic);
    // 更新数据源数组
    //刷新UI
    
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

网络解析

标签:

原文地址:http://www.cnblogs.com/guosir/p/5365182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!