UI一揽子计划 16 (网络编程、HTTP协议、iOS 实现网络编程、服务器接口)
来源:互联网 发布:caffe on spark 编辑:程序博客网 时间:2024/05/29 13:03
一.GET 请求方法
1.get同步请求
// Get同步请求
- (void)actionLeftButton:(UIBarButtonItem*)leftButton
{
// 创建网址对象
NSString *oldURL = kSearchURL;
- (void)actionLeftButton:(UIBarButtonItem*)leftButton
{
// 创建网址对象
NSString *oldURL = kSearchURL;
//如果你请求的网址中带有中文 得重新编码
NSString *stringURL = [oldURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//把字符串变成网址对象
NSURL *url = [NSURLURLWithString:stringURL];
// 发出一个请求
// cachePolicy 缓存策略 一般选择默认的 timeoutInterval请求超时时间 (超过多少秒就)
NSMutableURLRequest *urlRequest = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30.0];
//默认 就是Get请求 NSURLRequest 如果要设置的话 需要使用可变请求 NSMutableURLRequest
//设置请求类型 默认是get
[urlRequestsetHTTPMethod:@"GET"];
//建立连接
//接收二进制数据
//Response 服务器返回的 描述服务器的数据
// error 链接错误信息
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnectionsendSynchronousRequest:urlRequestreturningResponse:&responseerror:&error];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnectionsendSynchronousRequest:urlRequestreturningResponse:&responseerror:&error];
//要把data转化成json数据
NSMutableDictionary *dataDic =[NSJSONSerializationJSONObjectWithData:dataoptions:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"----%@", dataDic);
NSLog(@"----%@", dataDic);
}
2.get异步请求
// Get异步请求
- (void)actionRightButton:(UIBarButtonItem*)rightButton
{
// 如果网址有中文 就要重新编码
NSString *new = [kSearchURLstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
{
// 如果网址有中文 就要重新编码
NSString *new = [kSearchURLstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//利用网址 创建一个网址对象
NSURL *url = [NSURLURLWithString:new];
// 利用网址对象 创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
// 设置请求类型
[requestsetHTTPMethod:@"GET"];
#pragma mark异步请求两种方法1.Block方法实现
/* 异步请求两种方法:
1. // 建立一个异步请求的链接
// mainQueue 代表主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 异步相当于开启一个子线程 去加载数据
// 数据加载完成 调用Block 回到主线程
// 打印是否主线程
NSLog(@"%d", [NSThread isMainThread]);
1. // 建立一个异步请求的链接
// mainQueue 代表主线程
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 异步相当于开启一个子线程 去加载数据
// 数据加载完成 调用Block 回到主线程
// 打印是否主线程
NSLog(@"%d", [NSThread isMainThread]);
}];
*/
#pragma mark异步请求两种方法2.代理方法实现
// 注意: (同步异步有区别的地方)
//利用请求 创建一个链接
#pragma mark异步请求两种方法2.代理方法实现
// 注意: (同步异步有区别的地方)
//利用请求 创建一个链接
// 遵守协议的名字 NSURLConnectionDataDelegate
self.connection= [NSURLConnectionconnectionWithRequest:requestdelegate:self];
// 开启异步请求
// 开启异步请求
[self.connectionstart];
}
#pragma mark --NSURLConnectionDataDelegate代理方法
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[self.dataappendData:data];
NSLog(@"接受数据时触发");
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
// 触发方法 链接成功 初始化可变的data
self.data= [NSMutableDatadata];
NSLog(@"接受到服务器数据,说明链接成功了.");
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
// data已经完整了 接下来可以解析
// 要把data转化成json数据
NSMutableDictionary *dataDic =[NSJSONSerializationJSONObjectWithData:self.dataoptions:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"----%@", dataDic);
NSMutableDictionary *dataDic =[NSJSONSerializationJSONObjectWithData:self.dataoptions:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"----%@", dataDic);
NSLog(@"已经加载完成了");
}
/**
* NSURLConnectionDelegate 代理的方法 报错了
*/
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
NSLog(@"查看错误信息");
* NSURLConnectionDelegate 代理的方法 报错了
*/
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
NSLog(@"查看错误信息");
}
二.POST
1.POST同步
//同步
- (void)actionLeftButton:(UIBarButtonItem*)leftButton
{
// 1.创建网址对象
NSURL *url = [NSURLURLWithString:kNewsListURL];
// 2.利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
// 3.设置请求类型
[request setHTTPMethod:@"POST"];
// 4.注意:给这个请求携带一个请求体
NSData *data1 = [kNewsListParamdataUsingEncoding:NSUTF8StringEncoding];
// 携带到请求当中
[request setHTTPBody: data1];
// 5.利用一个请求创建一个链接并得到一个返回数据
NSData *data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];
NSMutableDictionary *dataDic = [NSJSONSerializationJSONObjectWithData:dataoptions:(NSJSONReadingMutableContainers)error:nil];
// 剥香蕉
NSLog(@"%@", dataDic);
- (void)actionLeftButton:(UIBarButtonItem*)leftButton
{
// 1.创建网址对象
NSURL *url = [NSURLURLWithString:kNewsListURL];
// 2.利用网址对象创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
// 3.设置请求类型
[request setHTTPMethod:@"POST"];
// 4.注意:给这个请求携带一个请求体
NSData *data1 = [kNewsListParamdataUsingEncoding:NSUTF8StringEncoding];
// 携带到请求当中
[request setHTTPBody: data1];
// 5.利用一个请求创建一个链接并得到一个返回数据
NSData *data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];
NSMutableDictionary *dataDic = [NSJSONSerializationJSONObjectWithData:dataoptions:(NSJSONReadingMutableContainers)error:nil];
// 剥香蕉
NSLog(@"%@", dataDic);
}
2.POST异步
// 异步
- (void)actionRightButton:(UIBarButtonItem*)rightButton
{
// 1. 利用网址创建一个url网址对象
NSURL *url = [NSURLURLWithString:kNewsListURL];
// 2. 利用网址对象 创建请求
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
// 3. 设置请求的类型
[request setHTTPMethod:@"POST"];
// 4. 给这个请求设置请求体
[request setHTTPBody:[kNewsListParamdataUsingEncoding:NSUTF8StringEncoding]];
// 5. 利用请求 创建链接 利用代理方法 实现异步请求数据
// (1)block方法
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
// NSLog(@"========%@", dataDic);
// }];
// (2)代理方法
self.connection= [NSURLConnectionconnectionWithRequest:requestdelegate:self];
// 开启链接
[self.connectionstart];
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
self.data= [NSMutableDatadata];
NSLog(@"返回服务器信息,声明链接成功了");
}
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[self.dataappendData:data];
NSLog(@"每次返回一点数据多次执行");
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
NSLog(@"请求失败,错误信息");
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSMutableDictionary *dataDic = [NSJSONSerializationJSONObjectWithData:self.dataoptions:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"%@", dataDic);
NSLog(@"完成请求此时可以进行数据解析");
- (void)actionRightButton:(UIBarButtonItem*)rightButton
{
// 1. 利用网址创建一个url网址对象
NSURL *url = [NSURLURLWithString:kNewsListURL];
// 2. 利用网址对象 创建请求
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
// 3. 设置请求的类型
[request setHTTPMethod:@"POST"];
// 4. 给这个请求设置请求体
[request setHTTPBody:[kNewsListParamdataUsingEncoding:NSUTF8StringEncoding]];
// 5. 利用请求 创建链接 利用代理方法 实现异步请求数据
// (1)block方法
// [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
// NSLog(@"========%@", dataDic);
// }];
// (2)代理方法
self.connection= [NSURLConnectionconnectionWithRequest:requestdelegate:self];
// 开启链接
[self.connectionstart];
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
self.data= [NSMutableDatadata];
NSLog(@"返回服务器信息,声明链接成功了");
}
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[self.dataappendData:data];
NSLog(@"每次返回一点数据多次执行");
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
NSLog(@"请求失败,错误信息");
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSMutableDictionary *dataDic = [NSJSONSerializationJSONObjectWithData:self.dataoptions:(NSJSONReadingMutableContainers)error:nil];
NSLog(@"%@", dataDic);
NSLog(@"完成请求此时可以进行数据解析");
}
3. Get 和 POST 的区别
1). get请求请求的网站全部明文显示 (安全性不高)
2). get请求有字符数的限制 (255个)
3). post请求请求的网址不光是有一个请求的网址 还可以携带请求体 这个请求体 是以nsdata形式携带 所以安全性较高
4). post请求没有字符数限制
1). get请求请求的网站全部明文显示 (安全性不高)
2). get请求有字符数的限制 (255个)
3). post请求请求的网址不光是有一个请求的网址 还可以携带请求体 这个请求体 是以nsdata形式携带 所以安全性较高
4). post请求没有字符数限制
一般公司都是用post请求,安全性高点.
三.图片链接加载(异步)
@interfaceImageViewController ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate>
@property(nonatomic,retain)UILabel*label;
@property(nonatomic,retain)UIImageView*imageView;
@property(nonatomic,retain)NSURLConnection*connection;
@property(nonatomic,retain)NSMutableData*data;
//定义一个属性记录总大小的
@property(nonatomic,assign)longlong totalLength;
@end
@implementationImageViewController
- (void)dealloc
{
[_connectioncancel];
[_connectionrelease];
[_labelrelease];
[_imageViewrelease];
[_datarelease];
[superdealloc];
}
- (void)viewDidLoad {
[superviewDidLoad];
self.navigationItem.title= @"Image";
UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithTitle:@"加载图片"style:(UIBarButtonItemStylePlain)target:selfaction:@selector(actionLeftButton:)];
self.navigationItem.leftBarButtonItem= leftButton;
[selfaddSubView];
// Do any additional setup after loading the view.
}
- (void)addSubView
{
self.imageView= [[UIImageViewalloc]initWithFrame:[self.viewbounds]];
[self.viewaddSubview:self.imageView];
self.imageView.backgroundColor= [UIColorblackColor];
self.label= [[UILabelalloc]initWithFrame:CGRectMake(100,100,100,40)];
self.label.textAlignment= NSTextAlignmentCenter;
self.label.backgroundColor= [UIColorgrayColor];
[self.imageViewaddSubview:self.label];
[_imageViewrelease];
[_labelrelease];
}
//请求用什么方法
- (void)actionLeftButton:(UIBarButtonItem*)button
{
[selfsetUpDataGet];
}
- (void)setUpDataGet
{
NSURL *url = [NSURLURLWithString:kImageURL];
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
[request setHTTPMethod:@"GET"];
self.connection= [NSURLConnectionconnectionWithRequest:requestdelegate:self];
}
@property(nonatomic,retain)UILabel*label;
@property(nonatomic,retain)UIImageView*imageView;
@property(nonatomic,retain)NSURLConnection*connection;
@property(nonatomic,retain)NSMutableData*data;
//定义一个属性记录总大小的
@property(nonatomic,assign)longlong totalLength;
@end
@implementationImageViewController
- (void)dealloc
{
[_connectioncancel];
[_connectionrelease];
[_labelrelease];
[_imageViewrelease];
[_datarelease];
[superdealloc];
}
- (void)viewDidLoad {
[superviewDidLoad];
self.navigationItem.title= @"Image";
UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithTitle:@"加载图片"style:(UIBarButtonItemStylePlain)target:selfaction:@selector(actionLeftButton:)];
self.navigationItem.leftBarButtonItem= leftButton;
[selfaddSubView];
// Do any additional setup after loading the view.
}
- (void)addSubView
{
self.imageView= [[UIImageViewalloc]initWithFrame:[self.viewbounds]];
[self.viewaddSubview:self.imageView];
self.imageView.backgroundColor= [UIColorblackColor];
self.label= [[UILabelalloc]initWithFrame:CGRectMake(100,100,100,40)];
self.label.textAlignment= NSTextAlignmentCenter;
self.label.backgroundColor= [UIColorgrayColor];
[self.imageViewaddSubview:self.label];
[_imageViewrelease];
[_labelrelease];
}
//请求用什么方法
- (void)actionLeftButton:(UIBarButtonItem*)button
{
[selfsetUpDataGet];
}
- (void)setUpDataGet
{
NSURL *url = [NSURLURLWithString:kImageURL];
NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:urlcachePolicy:(NSURLRequestUseProtocolCachePolicy)timeoutInterval:30];
[request setHTTPMethod:@"GET"];
self.connection= [NSURLConnectionconnectionWithRequest:requestdelegate:self];
}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
self.data= [NSMutableDatadata];
NSLog(@"开始,链接成功");
// 获取图片的大小
self.totalLength= response.expectedContentLength;
}
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[self.dataappendData:data];
// 利用data加载图片
self.imageView.image= [UIImageimageWithData:self.data];
NSLog(@"一点一点传");
// 计算图片加载进度
_label.text= [NSStringstringWithFormat:@"%f", (float)self.data.length/ self.totalLength];
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSLog(@"完成");
{
}
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
self.data= [NSMutableDatadata];
NSLog(@"开始,链接成功");
// 获取图片的大小
self.totalLength= response.expectedContentLength;
}
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[self.dataappendData:data];
// 利用data加载图片
self.imageView.image= [UIImageimageWithData:self.data];
NSLog(@"一点一点传");
// 计算图片加载进度
_label.text= [NSStringstringWithFormat:@"%f", (float)self.data.length/ self.totalLength];
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
NSLog(@"完成");
}
四.prefixHeader文件
将头文件 或者 宏定义都写在这个文件里面
改路径
0 0
- UI一揽子计划 16 (网络编程、HTTP协议、iOS 实现网络编程、服务器接口)
- ios网络编程协议---http
- HTTP 协议网络编程
- iOS开发 - 网络编程之HTTP协议
- iOS关于HTTP协议和网络编程
- IOS网络编程接口
- IOS网络编程接口
- iOS编程--------网络编程 iOS平台如何实现HTTP协议请求
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- IOS网络编程:HTTP
- iOS 网络编程 http
- 网络编程基础-http协议
- xcode7 找不到.dylib
- contrib module missing in opencv 3.0? up vote 3 down vote favorite I am using OpenCV 3.0 beta.
- 数据库优化设计方案有哪些?
- 奔向家的喜悦
- ceph部署过程
- UI一揽子计划 16 (网络编程、HTTP协议、iOS 实现网络编程、服务器接口)
- NsDate
- 使用python进行文本分类
- iOS9适配
- 面试官有问题?我看是你有问题吧!
- JSON.NET 简单的使用
- UI一揽子计划 17 (image的异步加载、KVO观察者模式、KVO进行豆瓣列表界面图片的异步加载)
- 开发者如何演示App功能给客户
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Te