UI第十六天:⺴络编程
2015-12-03 19:18
633 查看
⼀、HTTP协议的概念
HTTP协议,Hyper Text Transfer Protocol(超⽂本传输协议)是 ⽤于从万维⺴服务器传送超⽂本到本地浏览器的传输协议,HTTP是 ⼀个应⽤层协议,由请求和响应构成,是⼀个标准的客户端服务器 模型。
Client和Server常常分别处在相距很远的两台计算机上,Client程序的 任务是将⽤户的要求提交给Server程序,再将Server程序返回的结果以 特定的形式显⽰给⽤户;Server程序的任务是接收客户程序提出的服务 请求,进⾏相应的处理,再将结果返回给客户程序
⼆、iOS平台如何实现HTTP协议请求
⺴络请求地址对象NSURL的作⽤及⽤法
⺴络请求对象NSURLRequest、NSMutableURLRequest的作⽤及⽤法
⺴络链接对象NSURLConnection的作⽤及⽤法
⺴络链接协议NSURLConnectionDelegate的作⽤及⽤法
⺴络请求数据信息NSURLResponse的作⽤及⽤法
url,统⼀资源定位符,也被称为⺴址,因特⺴上标准的资源⺴址
⼀个典型的url:http://lily:123456@www.google.com/search? hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
url的符语法: 协议://授权/路径?查询
协议:ftp://(⽂件传输协议) http://(超⽂本传输协议) https://(安全超文本传输协议) file://(本地文件协议)
url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装, 可以使用NSURL对象获取相应的参数。
absoluteString: http://lily:123456@www.google.com/search? hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
scheme: http
host: www.google.com
user: lily
password: 123456
port: 8080
query: hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10
三、服务器接⼝的简单介绍
相同点:都能给服务器传输数据
不同点:
1、给服务器传输数据的⽅式: GET:通过⺴址字符串。 POST:通过data
2、传输数据的⼤⼩: GET:⺴址字符串最多255字节。 POST:使⽤NSData,容量超过1G
3、安全性: GET:所有传输给服务器的数据,显⽰在⺴址⾥,类似于密码的明⽂输⼊,直接可⻅。 POST:数据被转成NSData(⼆进制数据),类似于密码的密⽂输⼊,⽆法直接读取。
同步连接:程序容易出现卡死现象
异步连接:等待数据返回。
异步联接有两种实现⽅式:
设置代理,接收数据
实现block
同步连接
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
异步连接(代理)
设置NSURLConnection代理
实现相应的代理⽅法:开始响应接收数据、接收数据、成功、失败
- (void)connection:(NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
异步连接(block)
+ (void)sendAsynchronousRequest:(NSURLRequest*)request
queue:(NSOperationQueue*)queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError))handler
NSURLResponse
根据⺴络请求协议,封装了服务器返回数据的部分信息。服务器 响应⺴络请求后,返回数据的部分信息及数据本⾝。
expectedContentLength
suggestedFilename
MIMEType
textEncodingName
URL
NSHTTPURLResponse
NSURLResponse的⼦类,封装有关HTTP协议的响应信息。存储 了HTTP协议的响应头信息,状态码。
allHeaderFields
statusCode
如果⺴络请求时使⽤HTTP协议,NSURLResponse就是 NSHTTPURLResponse
总结
GET请求⽅式、POST是请求⽅式 同步、异步是连接⽅式 ⺴络请求的步骤:1、NSURL;2、NSURLRequest;3、 NSURLConnection;4、处理Error或者返回数据
//
注意:当这个页面被销毁的时候
如果请求还没有完成
需要终止这个链接
[_connection
cancel];
//同步请求会造成程序的卡顿(只有当请求完成
才会回复对界面的操作
用户的体验很差)
-(void)get:(UIBarButtonItem
*)bar
{
//注意如果网址中有中文要转换格式
NSString *newStr = [kSearchURL
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//转换一下编码格式
// NSString *new = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
//把字符串的网址转换成网址对象
NSURL *url =[NSURL
URLWithString:newStr];
//创建一个请求
//timeoutInterval
请求超时的时间
秒为单位
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];
// 设置一个请求标识
// 注意加标识符很重要
[request setHTTPMethod:@"get"];
//利用这个请求创建一个链接
//创建空的服务器响应信息
NSURLResponse *response =
nil;
//建立同步连接
并且得到返回的数据(data);
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response
error:nil];
//解析数据
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@"%@",dic);
}
// 异步请求
-(void)post:(UIBarButtonItem *)bar
{
// 获取网址对象(中文要转码)
NSString *urlStr = [kSearchURL
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//利用网址创建网址对象
NSURL *url = [NSURL
URLWithString:urlStr];
//利用网址对象创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest
alloc]initWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];
//标识请求类型
// 注意加标识符很重要
[request setHTTPMethod:@"Get"];
#pragma mark -- block
异步链接方法
//[NSOperationQueue mainQueue]代表回到主线程
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *connectionError) {
//当数据完成的时候
会指定这个block
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&connectionError];
NSLog(@"%@",dic);
// 判断是否在主线程
NSLog(@"%d",[NSThread
isMainThread]);
}];
#pragma mark -- 代理方法
//利用请求创建一个异步连接
// self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
// [self.connection start];
}
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response
{
self.data = [NSMutableData
data];
NSLog(@"已经接受到服务器的响应信息,说明链接成功了");
NSLog(@"%@",response);
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data
{
//可能多次触发这个方法才能接收到完整的data
//所有这个时候
需要拼接一下data
//拼接data
[self.data
appendData:data];
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:self.data
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@"%@",dic);
// 如果在tableview上展示的话
//注意:要刷新界面
NSLog(@"接受到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection
*)connection
{
NSLog(@"完成数据加载
触发的方法");
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"请求失败时打印%@",error);
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//post同步
-(void)get:(UIBarButtonItem *)bar
{
//创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
//创建一个请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
// 注意加标识符
// 为了看到清楚添加标识
[request setHTTPMethod:@"post"];
//把字符串转成data(使用utf-8编码格式)
NSData *data =[kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
//注意区别Post
请求可以携带一个请求体
[request setHTTPBody:data];
// 创建链接
NSData *newdata = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:newdata options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dic);
}
//post异步
-(void)post:(UIBarButtonItem *)bar
{
//创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
//创建一个请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
// 为了看到清楚添加标识
[request setHTTPMethod:@"post"];
//把字符串转成data(使用utf-8编码格式)
NSData *data =[kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
//注意区别Post
请求可以携带一个请求体
[request setHTTPBody:data];
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
// NSLog(@"%@",dic);
//
//
// }];
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[self.connection start];
}
HTTP协议,Hyper Text Transfer Protocol(超⽂本传输协议)是 ⽤于从万维⺴服务器传送超⽂本到本地浏览器的传输协议,HTTP是 ⼀个应⽤层协议,由请求和响应构成,是⼀个标准的客户端服务器 模型。
Client和Server常常分别处在相距很远的两台计算机上,Client程序的 任务是将⽤户的要求提交给Server程序,再将Server程序返回的结果以 特定的形式显⽰给⽤户;Server程序的任务是接收客户程序提出的服务 请求,进⾏相应的处理,再将结果返回给客户程序
⼆、iOS平台如何实现HTTP协议请求
⺴络请求地址对象NSURL的作⽤及⽤法
⺴络请求对象NSURLRequest、NSMutableURLRequest的作⽤及⽤法
⺴络链接对象NSURLConnection的作⽤及⽤法
⺴络链接协议NSURLConnectionDelegate的作⽤及⽤法
⺴络请求数据信息NSURLResponse的作⽤及⽤法
url,统⼀资源定位符,也被称为⺴址,因特⺴上标准的资源⺴址
⼀个典型的url:http://lily:123456@www.google.com/search? hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
url的符语法: 协议://授权/路径?查询
协议:ftp://(⽂件传输协议) http://(超⽂本传输协议) https://(安全超文本传输协议) file://(本地文件协议)
url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装, 可以使用NSURL对象获取相应的参数。
absoluteString: http://lily:123456@www.google.com/search? hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
scheme: http
host: www.google.com
user: lily
password: 123456
port: 8080
query: hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10
三、服务器接⼝的简单介绍
相同点:都能给服务器传输数据
不同点:
1、给服务器传输数据的⽅式: GET:通过⺴址字符串。 POST:通过data
2、传输数据的⼤⼩: GET:⺴址字符串最多255字节。 POST:使⽤NSData,容量超过1G
3、安全性: GET:所有传输给服务器的数据,显⽰在⺴址⾥,类似于密码的明⽂输⼊,直接可⻅。 POST:数据被转成NSData(⼆进制数据),类似于密码的密⽂输⼊,⽆法直接读取。
同步连接:程序容易出现卡死现象
异步连接:等待数据返回。
异步联接有两种实现⽅式:
设置代理,接收数据
实现block
同步连接
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
异步连接(代理)
设置NSURLConnection代理
实现相应的代理⽅法:开始响应接收数据、接收数据、成功、失败
- (void)connection:(NSURLConnection *)connection didReceiveResponse: (NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
异步连接(block)
+ (void)sendAsynchronousRequest:(NSURLRequest*)request
queue:(NSOperationQueue*)queue completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError))handler
NSURLResponse
根据⺴络请求协议,封装了服务器返回数据的部分信息。服务器 响应⺴络请求后,返回数据的部分信息及数据本⾝。
expectedContentLength
suggestedFilename
MIMEType
textEncodingName
URL
NSHTTPURLResponse
NSURLResponse的⼦类,封装有关HTTP协议的响应信息。存储 了HTTP协议的响应头信息,状态码。
allHeaderFields
statusCode
如果⺴络请求时使⽤HTTP协议,NSURLResponse就是 NSHTTPURLResponse
总结
GET请求⽅式、POST是请求⽅式 同步、异步是连接⽅式 ⺴络请求的步骤:1、NSURL;2、NSURLRequest;3、 NSURLConnection;4、处理Error或者返回数据
//
注意:当这个页面被销毁的时候
如果请求还没有完成
需要终止这个链接
[_connection
cancel];
//同步请求会造成程序的卡顿(只有当请求完成
才会回复对界面的操作
用户的体验很差)
-(void)get:(UIBarButtonItem
*)bar
{
//注意如果网址中有中文要转换格式
NSString *newStr = [kSearchURL
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//转换一下编码格式
// NSString *new = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
//把字符串的网址转换成网址对象
NSURL *url =[NSURL
URLWithString:newStr];
//创建一个请求
//timeoutInterval
请求超时的时间
秒为单位
NSMutableURLRequest *request = [NSMutableURLRequest
requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];
// 设置一个请求标识
// 注意加标识符很重要
[request setHTTPMethod:@"get"];
//利用这个请求创建一个链接
//创建空的服务器响应信息
NSURLResponse *response =
nil;
//建立同步连接
并且得到返回的数据(data);
NSData *data = [NSURLConnection
sendSynchronousRequest:request
returningResponse:&response
error:nil];
//解析数据
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@"%@",dic);
}
// 异步请求
-(void)post:(UIBarButtonItem *)bar
{
// 获取网址对象(中文要转码)
NSString *urlStr = [kSearchURL
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//利用网址创建网址对象
NSURL *url = [NSURL
URLWithString:urlStr];
//利用网址对象创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest
alloc]initWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];
//标识请求类型
// 注意加标识符很重要
[request setHTTPMethod:@"Get"];
#pragma mark -- block
异步链接方法
//[NSOperationQueue mainQueue]代表回到主线程
[NSURLConnection
sendAsynchronousRequest:request
queue:[NSOperationQueue
mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data,
NSError *connectionError) {
//当数据完成的时候
会指定这个block
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&connectionError];
NSLog(@"%@",dic);
// 判断是否在主线程
NSLog(@"%d",[NSThread
isMainThread]);
}];
#pragma mark -- 代理方法
//利用请求创建一个异步连接
// self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
// [self.connection start];
}
- (void)connection:(NSURLConnection *)connection
didReceiveResponse:(NSURLResponse *)response
{
self.data = [NSMutableData
data];
NSLog(@"已经接受到服务器的响应信息,说明链接成功了");
NSLog(@"%@",response);
}
- (void)connection:(NSURLConnection *)connection
didReceiveData:(NSData *)data
{
//可能多次触发这个方法才能接收到完整的data
//所有这个时候
需要拼接一下data
//拼接data
[self.data
appendData:data];
NSMutableDictionary *dic = [NSJSONSerialization
JSONObjectWithData:self.data
options:NSJSONReadingMutableContainers
error:nil];
NSLog(@"%@",dic);
// 如果在tableview上展示的话
//注意:要刷新界面
NSLog(@"接受到数据触发的方法");
}
- (void)connectionDidFinishLoading:(NSURLConnection
*)connection
{
NSLog(@"完成数据加载
触发的方法");
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"请求失败时打印%@",error);
}
- (void)didReceiveMemoryWarning {
[super
didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//post同步
-(void)get:(UIBarButtonItem *)bar
{
//创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
//创建一个请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
// 注意加标识符
// 为了看到清楚添加标识
[request setHTTPMethod:@"post"];
//把字符串转成data(使用utf-8编码格式)
NSData *data =[kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
//注意区别Post
请求可以携带一个请求体
[request setHTTPBody:data];
// 创建链接
NSData *newdata = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:newdata options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dic);
}
//post异步
-(void)post:(UIBarButtonItem *)bar
{
//创建网址对象
NSURL *url = [NSURL URLWithString:kNewsListURL];
//创建一个请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
// 为了看到清楚添加标识
[request setHTTPMethod:@"post"];
//把字符串转成data(使用utf-8编码格式)
NSData *data =[kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
//注意区别Post
请求可以携带一个请求体
[request setHTTPBody:data];
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
// NSLog(@"%@",dic);
//
//
// }];
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[self.connection start];
}
相关文章推荐
- iOS_UITabBarController 标签视图控制器
- iOS 开发 中级:UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem自定义方法总结
- UITabBarController的每个item的title如何不占位置
- ios 开发中,如何设置 uitabbar 里面 tabbaritem 不显示文字,只显示图片,图片垂直居中?
- easyui 合并单元格
- iOS-UITextField-常用方法
- iOS UITabBarController tabbar 上面的文字title 怎么移动位置
- miniui中的相关问题
- confluence是一块商用的专业wiki
- 1950QuickPow(快速幂加法)
- UITableView的contentSize
- 杭电1159Common Subsequence
- 转----详解IOS开发应用之并发Dispatch Queues
- POS主密钥与工作密钥关联详解
- AuidioStreamPlayer简易实现
- 【并查集】:poj2524,Ubiquitous Religions
- iOS开发UI篇—UIWindow简单介绍
- Java基础---图形用户界面GUI(二)
- 利用UIButton简单实现TOM猫
- uestc 1222 Sudoku 搜索