网络请求的基础知识

来源:互联网 发布:codol淘宝刷gp原理 编辑:程序博客网 时间:2024/04/27 17:05

网络请求的基础知识

网络请求的方式分类

  • 同步请求

    • 一旦请求发出,必须等服务器有响应才能继续后续操作
    • 同步请求的方式 (三种)
     创建URL对象 NSURL *url = [NSURL URLWithString:@"http://dl_dir.qq.com/qqfile/qq/QQforMac/QQ_V2.4.1.dmg"];/* 第1种方法 */NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];/* 第2种方法 */NSData *data = [NSData dataWithContentsOfURL:url];/* 第3种方法(使用NSURLConnection发送同步请求) */3.1 创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url];3.2 发送同步请求[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
  • 异步请求 (常用NSURLConnection, AFNetworking, NSURLSession, 下一份笔记会详细对比)

    • 一旦请求发出,不用等服务器有响应就能继续后续操作
    • 异步请求的方式一 (使用NSURLConnection发送异步请求)
    /* 第1种方法 */1.1 创建URL对象NSURL *url = [NSURL URLWithString:@"http://dl_dir.qq.com/qqfile/qq/QQforMac/QQ_V2.4.1.dmg"];1.2 创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url];1.3 发送异步请求[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {    NSLog(@"请求完成");}];
    • 异步请求的方式二 (使用NSURLConnection的代理方法)
      • 发送网络请求 + 实现四个代理方法
     /* 第2种方法 */ 2.1 创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url]; 2.2 发送异步请求, 并绑定其代理为self[NSURLConnection connectionWithRequest:request delegate:self]; ``` ``` 2.3 实现第一个代理方法(只有在收到服务器响应时会触发) //注意:参数response即服务器返回的响应头, 包含返回数据的各种信息, 如文件名,文件大小,文件类型 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{//1. 清空数据 (事先定义一个全局变量_downloadData来保存请求下来的数据)(在保存数据之前, 为了防止和上一次请求的数据发生混合, 应该先清除上一次的数据)self.downloadData.length = 0;//2. 获取文件总大小self.allSizeBytes = response.expectedContentLength;//3. 获取文件名字NSString *filename = response.suggestedFilename;NSLog(@"文件名字:%@",filename);//4. 获取文件类型NSString *type = response.MIMEType;NSLog(@"文件类型:%@",type);//5. 获取状态码NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;NSInteger statusCode = httpResponse.statusCode;NSLog(@"状态码:%ld",statusCode);}
    2.4 实现第二个代理方法(接受服务器传过来的数据) 服务器会分段把数据传给客户端, 因此该方法可能会走多次. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{//叠加数据[self.downloadData appendData:data];}
    2.5 实现第三个代理方法(下载完成了会触发)(void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(@"下载完成");//将下载完成的数据复制给图片self.image = [UIImage imageWithData:self.downloadData];}
    2.6 实现第四个代理方法(下载失败)-  (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{NSLog(@"下载失败--%@",error);}

网络协议

  • http(超文本传输协议)
  • https(加密)

Http请求的结构

  • 请求头
  • 请求体

Http最常用的请求的方法

  • GET请求(常用)
    • 从指定的服务器中获取数据
    • 特点:
      • GET请求能够被缓存
      • GET请求会保存在浏览器的浏览记录中
      • 以GET请求的URL能够保存为浏览器书签
      • GET请求有长度限制
      • GET请求不安全
  • POST请求(常用)
    • 提交数据给指定的服务器处理
    • 特点
      • POST请求不能被缓存下来
      • POST请求不会保存在浏览器浏览记录中
      • 以POST请求的URL无法保存为浏览器书签
      • POST请求没有长度限制
      • 相对于GET请求来说, POST请求更加安全

网络请求的注意事项

  • 中文编码问题
      对urlString进行UTF8编码 --> 转换成URL      NSString *urlString = @"https://api.douban.com/v2/book/search?q=开发"       urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];      NSURL *url = [NSURL URLWithString:urlStr];
  • NSURL和NSString之间的转换
     NSURL->NSString  ====>  [url absoluteString]     NSString->NSURL  ====>  [NSURL URLWithString:@""]
1 0
原创粉丝点击