首页 > 学院 > 开发设计 > 正文

IOS之同步请求、异步请求、GET请求、POST请求

2019-11-14 18:06:10
字体:
来源:转载
供稿:网友

原链接在此:http://blog.csdn.net/liulala16/article/details/8271673

 

1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,

2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;

4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

 

  POST和GET请求方式的区别:
    1)GET将网址和参数拼接在一起,POST中网址和参数是分离的。
    2)GET请求提交的数据最大到255个字节,但是POST请求提交的数据是没有限制的。
    3)GET请求因为网址和参数是一起的因此不安全,但是POST请求因为网址和参数是分离的因此比较安全。
    4)GET请求经常用来从服务器请求数据,POST请求经常用来向服务器发送数据。(比如上传文件)

 

     同步和异步请求的区别:
     同步请求需要主线程进行数据请求,在数据没有回来之前其它的操作都会被阻塞,造成程序的卡顿现象。
     异步请求是主线程找了一个子线程(小弟)去进行网络数据请求,因此对于其它的界面操作主线程还可以做,不会有程序卡顿现象的出现,因此网络请求时我们选择使用异步请求。

  POST请求与GET请求在请求过程中只是多了设置请求方式和设置参数内容的两步操作,其它操作与GET操作相同。

  //设置请求方式,(默认情况下是GET请求)
   [request setHTTPMethod:@"POST"];
     //3:设置参数,打包--包体对象
     //将参数从NSString类型转换成NSData类型
      NSString *parameters = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";
      NSData *body = [parameters dataUsingEncoding:NSUTF8StringEncoding];
      [request setHTTPBody:body];

 

 

1、     同步GET请求

 

   //第一步,创建URL

  NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];

    //第二步,通过URL创建网络请求

    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUsePRotocolCachePolicy timeoutInterval:10];

    //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)

      其中缓存协议是个枚举类型包含:

      NSURLRequestUseProtocolCachePolicy(基础策略)

      NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)

      NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)

          //第三步,连接服务器

    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    

    NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];

 

 
2.同步POST请求

    //第一步,创建URL

    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];

    //第二步,创建请求

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    [request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET

    NSString *str = @"type=focus-c";//设置参数

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPBody:data];

 

    //第三步,连接服务器

    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];

    NSLog(@"%@",str1);

 
 
 
3、异步GET请求

    //第一步,创建url

    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];

    //第二步,创建请求

    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    //第三步,连接服务器

    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];


4、异步POST请求

    //第一步,创建url

    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];

    //第二步,创建请求

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

    [request setHTTPMethod:@"POST"];

    NSString *str = @"type=focus-c";

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    [request setHTTPBody:data];

    //第三步,连接服务器

    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];



5、异步请求的代理方法

 

//接收到服务器回应的时候调用此方法

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

{

    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

    NSLog(@"%@",[res allHeaderFields]);

    self.receiveData = [NSMutableData data];

  


                              

}

//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次

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

{

    [self.receiveData appendData:data];

}

//数据传完之后调用此方法

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

    NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];

    NSLog(@"%@",receiveStr);

}

//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法

-(void)connection:(NSURLConnection *)connection

 didFailWithError:(NSError *)error

{

    NSLog(@"%@",[error localizedDescription]);

 

 

 

 

 

 

 

 

 

 

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表