网络编程 同步异步加载 SET POST


/**

 *  创建NSData类型对象, 用来接收异步请求回得数据

 */

@property(nonatomic, retain) NSMutableData *asyData;




@end


@implementation ViewController


/*

 gatpost的区别

 1.请求方式  参数部分: get采用字符串直接拼接的方法, post使用NSData类型数据拼接. 对安全性产生了影响. NSData类型使用二进制数, 不直接看到值. 相当于密文方式.

 

 2.容量大小  get请求最多允许255字节的字符串, post的采用NSData最大可超过1G.

 

 3.使用get更多, 因为简单.

 

 




 同步请求弊端: 等所有信息全部返回之后才能显示下一步操作. 容易出现卡死现象. 大量数据时不能用.


 

*/


/*

同步请求的特点: 一旦发送请求, 当前程序一直等待获得全部响应信息, 才可以进行下一步操作. (页面假死现象)


*/



- (IBAction)getSyn:(id)sender {

    

    NSLog(@"开始get同步方法");

    

    //第一步: 获取地址

    NSString *urlStr = @"http://p1.pichost.me/i/40/1639665.png";

    

    //第二步: 创建url对象

    NSURL *url = [NSURL URLWithString:urlStr];

    

    //第三步: 创建网络请求对象 (NSURlRequest)

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    

    //第四步: 创建响应对象 (NSURLResponse)

    NSURLResponse *response = nil;

    

    

    //错误信息 可有可无

    //如果网络有错误, 可以用来接收错误信息

    NSError *error = nil;

    

    

    //第五步: 创建网络链接, 并且获得返回的NSData

    

    /**

     *  参数说明: 1.请求对象; 2.用来接收响应的对象 (两个** 取址) 3.错误信息

     */

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    

    //如果请求错误, 打印错误信息

    if (error) {

        

        NSLog(@"%@", error);

        

    }else{

        

        //进行数据解析

        

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

        

        

        NSLog(@"%@", dic);

        

        

    }

    

    

    

    

    

}

- (IBAction)postSyn:(id)sender {


    NSLog(@"开始post同步方法");


    //第一步: 获得地址

    NSString *string = @"http://mapi.pianke.me/pub/jing";

    

    //第二步: 创建url对象

    NSURL *url = [NSURL URLWithString:string];

    

    //第三步: 创建请求对象 (需要设置请求方式, 并且拼接参数, 所以需要使用可变的请求对象)

    //参数不是都写在网址中的

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    

    //第四步:设置请求方式(默认是GET, 注意: POST全大写)

    //默认为get请求方式

    [request setHTTPMethod:@"POST"];

    

    //第五步: 拼接POST请求参数部分

    //      (1). 获得参数字符串

    

    //参数部分

    NSString *bodyStr = @"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";

    

    

    //      (2). 将参数字符串转化成NSData类型对象

    //       方法: dataUsingEncoding 指定编码格式

    NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

    

    //第六步: 设置请求参数

    [request setHTTPBody:bodyData];

    

    

    //第七步: 设置响应对象和错误信息

    NSURLResponse *response = nil;

    

    NSError *errol = nil;

    

    

    //第七步: 建立网络链接, 获得响应数据

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&errol];

    

    

    //最后一步: 进行数据解析

    if (errol) {

        

        NSLog(@"%@", errol);

        

    }else{

        

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

        

        NSLog(@"%@", dic);

        

        

    }

    

    

    

    

    

}

- (IBAction)gatAsy:(id)sender {


    NSLog(@"开始get的异步请求方法");

    

    

    //1, 2 创建URL对象

    NSURL *url = [NSURL URLWithString:@"http://p1.pichost.me/i/40/1639665.png"];

    

    //3. 创建网络请求对象 (NSURLRequest)

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    

    //4.创建网络链接对象 (NSURLConnection)

    //参数说明: 1.请求对象  2.代理人

    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];

    

    

    //5.建立连接

    [connection start];

    

    


}



#pragma mark 获得响应

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

    NSLog(@"获得服务器响应");

    

    //数据源, 最晚需要在获得响应时创建

    self.asyData = [[NSMutableData alloc]init];

    

}



#pragma mark 获得响应数据 (这个方法会多次执行, 每次获得部分响应信息)

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    NSLog(@"获得响应数据");

    //每次调用这个方法, 返回一些data

    //Data不一起给, 这个方法会执行多次, 每次拼接到上次的Data, Data必须为NSMutableData

    

    [self.asyData appendData:data];

    

}




#pragma mark 接收响应信息结束

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    //进行数据解析

    NSLog(@"完成数据加载, 结束接收响应");

    

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.asyData options:0 error:nil];

    

    NSLog(@"%@", dic);

    

    

}






#pragma mark POST异步请求 (Block实现)


- (IBAction)postAsy:(id)sender {


    NSLog(@"Post异步方法");

    

    //第一步获得地址

    NSString *string = @"http://mapi.pianke.me/pub/jing";

    

    //第二步获得URL对象

    NSURL *url = [NSURL URLWithString:string];

    

    //第三步创建网络请求对象

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    

    //第四步请求方式

    [request setHTTPMethod:@"POST"];

    

    //获得请求参数

    //(1). 获得参数字符串

           NSString *bodyStr = @"auth=CJFm1FH259KJDCsF1Gs3ikDJxQMejNrOMom1lsDzRlcWP22NJPSh5a7m34&client=1&did=DC7311B8-4DFE-4BC2-99D9-565BF1215670&version=3.0.6";

    

    //(2). 将参数字符串转化成NSData对象

           NSData *bodyData = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

    

    

    

    //第六步: 设置请求参数

    [request setHTTPBody:bodyData];

    

    //第七步: 开始异步请求

    /**

     *  参数说明

     *

        1.请求对象

        2.主线程

        3.Block

     

     *  @param response       响应对象

     *  @param data           响应数据

     *  @param connectionError  错误信息

     *

     *  @return

     */

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        

        

        //Block内部获得的Data是完整的

        if (connectionError) {

            

            NSLog(@"%@", connectionError);

            

        }else{

            

            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

            

            NSLog(@"%@", dic);

        }

        

        

        

        

    }];

    

    

    

    

    

    

    

}


#pragma mark 改变背景颜色


- (IBAction)changeBackgroundColor:(id)sender{

    

    

    self.view.backgroundColor = [UIColor orangeColor];

    

    

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值