多线程与网络之NSURLConnection发送请求

 

HTTP

  • 1.简介
    • 1.URL:统一资源分配符
    • 2.协议名://主机地址/路径
    • 3.HTTP: 超文本传输协议

NSURLConnection

  • 1.基本简介:

    • 1.1 NSURLRequest: 一个这对象代表一个请求,里面有:
      • 一个NSURL对象
      • 请求方法,请求头,请求体
      • 请求超时...
    • 1.2 NSMutableURLRequest: NSURLRequest的子类
  • 2.使用步骤:

    • 2.1 创建一个NSURL对象,设置请求路径(协议名://主机地址/路径 + ? + 参数1 & 参数2)
    • 2.2 传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(默认就有)
    • 2.3 使用NSURLConnection发送请求(得到服务器返回的数据)
    • 2.5 解析服务器响应的数据(将NSData转成NSString)
  • 3.发送GET请求

    // 第一种:同步
    // 1.创建一个NSURL对象,设置请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=xiao&pwd=xiao&type=JSON"];
    
    // 2.传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(默认存在)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.使用NSURLConnection发送请求,得到服务器返回的NSData数据
    NSURLResponse *response = nil;  // 真实类型是NSHTTPURLResponse
    NSError *error = nil;
    /*
     第一个参数:请求对象
     第二个参数:响应头信息,传地址
     第三个参数:错误信息, 传地址
     */
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    
    // 第二种:异步
    // 1.创建一个NSURL对象.设置请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
    // 2.创建一个NSURLRequest对象,设置请求头和请求体(默认存在)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 3.使用NSURLConnection发送网络请求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] 
        completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
    
        NSLog(@"%@", [NSThread currentThread]);
        // 4.解析服务器响应的数据
        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", str);
    }];
    
    // 第三种:(异步代理)注意data一定要拼接
    - (void)sendAsyncDelegate
    {
    // 1.创建一个NSURL对象,设置请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
    // 2.创建一个NSURLRequest对象,设置请求头和请求体(默认存在)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 3.使用NSURLConnection来发送请求(返回服务器响应的数据)
    //    [NSURLConnection connectionWithRequest:request delegate:self]; // 第一种
    //    [[NSURLConnection alloc] initWithRequest:request delegate:self]; // 第二种
    
    NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; // 第三种
    // 如果 startImmediately 设置成NO时,必须调用start方法调用
    [connect start];
    }
    // 实现代理方法
    // 1.当接受到服务器响应的时候调用
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
    self.dataM = [NSMutableData data];
    }
    // 2.当接收到服务器返回的二进制数据的时候调用, 会调用多次
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
    [self.dataM appendData:data];
    }
    // 3.当请求失败或者错误的时候调用(请求超时)
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {}
    // 4.当请求结束的事后调用
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
    // 解析数据
    NSString *str = [[NSString alloc] initWithData:self.dataM encoding:NSUTF8StringEncoding];
    NSLog(@"%@", str);
    }
  • 4.发送POST请求

    // 1.创建NSURL
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];
    
    // 2.创建NSMutableURLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 2.1 设置NSMutableURLRequest的属性
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];
    
    request.timeoutInterval = 10.0; //过期时间
    
    [request setValue:@"ios10" forHTTPHeaderField:@"User-Agent"];
    
    // 3.发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] 
        completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
    
        // 解析数据
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];
posted @ 2015-12-28 23:03  LongLJ  阅读(215)  评论(0编辑  收藏  举报