您的位置:首页 > 理论基础 > 计算机网络

UI 网络请求

2015-12-05 19:23 369 查看

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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: