UI 网络请求

HTTP协议

HTTP协议,Hyper Text Transfer Protocol(超⽂本传输协议)是 ⽤于从万维⺴服务器传送超⽂本到本地浏览器的传输协议,HTTP是 ⼀个应⽤层协议,由请求和响应构成,是⼀个标准的客户端服务器 模型。
http 3次握手 用户连续向服务器3次发送一样的请求 第三次服务器不再询问,开始执行
url:统一资源定位符,也被成为网址,因特网上标准的资源网址
url的符语法: 协议://授权/路径?查询
协议: ftp:// (文件传输协议) http://(超文本传输协议) https://(安全超文本传输协议) file://(本地文件协议)

GET与POST的区别:

GET:通过网址字符串 最多255字节
POST:使用NSData,容量超过1G
利用get请求 请求一个网址时 明文显示(携带的信息不安全)
post: 数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取.

连接方式:
同步连接: 会造成程序的卡顿(只有当请求完成 才会恢复对界面的操作 用户体验很差)
异步连接:等待数据返回
异步连接有两种实现方式: 设置代理 接收数据
实现block

GET请求
不管同步还是异步前面4步的步骤是一样的

   // 1.网址中有中文的需要转化一下格式  中文不能直接转   没有就不需要
NSString *newStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  // 2.把字符串的网址转化为网址对象
    NSURL *url = [NSURL URLWithString:newStr];
  // 3.创建一个请求
     // timeoutInterval  请求超时的时间  秒为单位
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
 // 4.设置一个请求的标志 标识符很重要
    [request setHTTPMethod:@"GET"];


**同步时:**
 // 5.建立同步连接 并得到返回的数据
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
 后面两个对象可以为空   一个是服务器响应信息   一个是错误信息
 // 6.解析数据

**异步时:**
   代理方法:
 // 5.利用请求 创建一个异步连接
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
 // 6.开始连接
    [self.connection start]
 然后实现代理方法
   a.接收到服务器的响应信息时触发的方法 连接成功里面  创建data
   b.接收到数据触发的方法(走很多次)多次触发这个方法才能接收到完整的data  所以需要拼接一下data
    [self.data appendData:data];
   c.已经完成数据加载  触发的方法  解析数据在这里面进行  **如果在tableView上展示的话 注意刷新界面**
   d.请求失败时触发

block异步连接方法
    // [NSOperationQueue mainQueue]
    // 代表回到主线程
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 当数据请求完成的时候会指定 这个block
        NSLog(@"%@",data);
        // 判断是否在主线程
        NSLog(@"%d",[NSThread isMainThread]);

    }];

POST与GET差不多,这不过POST的url与data是分开的
区别:POST请求 可以携带一个请求体

NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
其他是一样的.

获取服务器响应信息的长度 long long 类型的response.expectedContentLength
data.length 得到的data的长度
以获取到data的形式得到image
UIImage *image = [UIImage imageWithData:self.data];

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值