zoukankan      html  css  js  c++  java
  • OC -网络请求

      1 #import "ViewController.h"
      2 
      3 @interface ViewController ()<NSURLConnectionDataDelegate>
      4 /** 注释 */
      5 @property (nonatomic, strong) NSMutableData *resultData;
      6 @end
      7 
      8 @implementation ViewController
      9 
     10 #pragma mark ----------------------
     11 #pragma mark lazy loading
     12 -(NSMutableData *)resultData
     13 {
     14     if (_resultData == nil) {
     15         _resultData = [NSMutableData data];
     16     }
     17     return _resultData;
     18 }
     19 #pragma mark ----------------------
     20 #pragma mark Events
     21 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
     22 {
     23     [self delegate];
     24 }
     25 
     26 /*
     27  请求:请求头(NSURLRequest默认包含)+请求体(GET没有)
     28  响应:响应头(真实类型--->NSHTTPURLResponse)+响应体(要解析的数据)
     29  */
     30 #pragma mark ----------------------
     31 #pragma mark Methods
     32 -(void)sync
     33 {
     34     /*
     35      GET:http://120.25.226.186:32812/login?username=123&pwd=456&type=JSON
     36      协议+主机地址+接口名称+?+参数1&参数2&参数3
     37      post:http://120.25.226.186:32812/login
     38      协议+主机地址+接口名称
     39      */
     40     //GET,没有请求体
     41     //1.确定请求路径
     42     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
     43     
     44     //2.创建请求对象
     45     //请求头不需要设置(默认的请求头)
     46     //请求方法--->默认为GET
     47     NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
     48     
     49     //3.发送请求
     50     //真实类型:NSHTTPURLResponse
     51     NSHTTPURLResponse *response = nil;
     52     /*
     53      第一个参数:请求对象
     54      第二个参数:响应头信息
     55      第三个参数:错误信息
     56      返回值:响应体
     57      */
     58     //该方法是阻塞的,即如果该方法没有执行完则后面的代码将得不到执行
     59     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
     60     
     61     //4.解析 data--->字符串
     62     //NSUTF8StringEncoding
     63     NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
     64     
     65     NSLog(@"%zd",response.statusCode);
     66 }
     67 
     68 -(void)async
     69 {
     70     //1.确定请求路径
     71     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
     72     
     73     //2.创建请求对象
     74     //请求头不需要设置(默认的请求头)
     75     NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
     76     
     77     //3.发送异步请求
     78     /*
     79      第一个参数:请求对象
     80      第二个参数:队列 决定代码块completionHandler的调用线程
     81      第三个参数:completionHandler 当请求完成(成功|失败)的时候回调
     82         response:响应头
     83         data:响应体
     84         connectionError:错误信息
     85      */
     86     [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
     87         
     88        
     89         //4.解析数据
     90         NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
     91         
     92         NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
     93         NSLog(@"%zd",res.statusCode);
     94         NSLog(@"%@",[NSThread currentThread]);
     95     }];
     96 }
     97 
     98 -(void)delegate
     99 {
    100     //1.确定请求路径
    101     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"];
    102     
    103     //2.创建请求对象
    104     NSURLRequest *request = [NSURLRequest requestWithURL:url];
    105     
    106     //3.设置代理,发送请求
    107     //3.1
    108     //[NSURLConnection connectionWithRequest:request delegate:self];
    109     
    110     //3.2
    111     //[[NSURLConnection alloc]initWithRequest:request delegate:self];
    112     
    113     //3.3 设置代理,时候发送请求需要检查startImmediately的值
    114     //(startImmediately == YES 会发送 | startImmediately == NO 则需要调用start方法)
    115     NSURLConnection * connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
    116     
    117     //调用开始方法
    118     [connect start];
    119     
    120 //    [connect cancel];//取消
    121 }
    122 
    123 #pragma mark ----------------------
    124 #pragma mark NSURLConnectionDataDelegate
    125 //1.当接收到服务器响应的时候调用
    126 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    127 {
    128     NSLog(@"%s",__func__);
    129 }
    130 
    131 //2.接收到服务器返回数据的时候调用,调用多次
    132 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    133 {
    134      NSLog(@"%s",__func__);
    135     
    136     //拼接数据
    137     [self.resultData appendData:data];
    138 }
    139 //3.当请求失败的时候调用
    140 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    141 {
    142      NSLog(@"%s",__func__);
    143 }
    144 
    145 //4.请求结束的时候调用
    146 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    147 {
    148      NSLog(@"%s",__func__);
    149     
    150     NSLog(@"%@",[[NSString alloc]initWithData:self.resultData encoding:NSUTF8StringEncoding]);
    151 }
    152 @end
  • 相关阅读:
    圆形按钮窗口控制-不断减少的圆圈
    图像按钮和模拟Windows媒体播放器UI
    圆形按钮
    本机Win32主题感知所有者绘制控件没有MFC
    CRegionButton -一个多向按钮
    Iconits
    CxShadeButton
    管道符 |
    gedit
    more/less
  • 原文地址:https://www.cnblogs.com/qingzZ/p/9291109.html
Copyright © 2011-2022 走看看