NEtWorking_四种数据请求方式
来源:互联网 发布:山西东华软件 编辑:程序博客网 时间:2024/06/06 13:03
ViewController.m
#import "ViewController.h"@interface ViewController ()<NSURLConnectionDataDelegate>//用来拼接数据@property (nonatomic,strong) NSMutableData * appendData;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}/* 同步和异步的区别 同步:主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求。所以这个时候的所有请求将会在服务端得到同步 异步:指客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求,这样对于所有的请求动作来说将会在服务端得到异步,这条请求的链路就象是一个请求队列,所有的动作在这里不会得到同步的。 *//* get和post区别: get会显示所有信息,在URL上显示 post会把信息放在一个body里,看不见(但只是所谓的安全,最好的安全师抓到包(获取信息)也没有用) */#pragma mark -- 一下四个都是button点击事件//get同步(不常用)//容易出现假死现象(不能进行任何操作)-(IBAction)getSync:(id)sender { NSLog(@"get同步"); // 1.准备url(全国统一定位符)// 这个string是地址// ? 的后面是参数,用 & 隔开; = 前面是变量名,后面是参数(可改变) NSString * urlStr = @"http://172.21.8.5/?userName=yan3&password=123"; NSURL * url = [NSURL URLWithString:urlStr]; // 2.创建请求对象 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30]; // 设置// 默认就是GET [request setHTTPMethod:@"GET"]; // 3.创建响应对象(目的接收响应)// 这里没必要创建值,因为请求回来是会给他一个值 NSURLResponse * response = nil; // 4.创建错误对象 NSError * error = nil; // 5.发送请求,建立连接,接收(数据 || 响应 || 错误)// 巨大问题:有可能出现假死现象:所有UI程序停下来等他响应完成 NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"data : %@",data); NSLog(@"response : %@",response); NSLog(@"error : %@",error); }//get异步(一定要掌握)- (IBAction)getAsyn:(id)sender { NSLog(@"get异步"); // 1.准备url NSString * urlStr = @"http://172.21.8.5/?userName=yan3&password=123"; NSURL * url = [NSURL URLWithString:urlStr]; // 2.创建请求对象 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url]; // 异步不需要创建响应和错误// 3.发送请求建立连接(代理) NSURLConnection * conn = [NSURLConnection connectionWithRequest:request delegate:self]; // 4.启动 [conn start]; // 5.取消(不要在这写)// [conn cancel];}//post同步- (IBAction)postSync:(id)sender { NSLog(@"post同步"); // 1.准备url// 这的参数就不要了,写在下面3. NSString * urlStr = @"http://172.21.8.5/"; NSURL * url = [NSURL URLWithString:urlStr]; // 2.准备请求对象 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; // 3.准备参数 NSString * paramStr = [NSString stringWithFormat:@"userName=yan3&password=123"];// 将参数转换成NSData类型 NSData * paramData = [paramStr dataUsingEncoding:NSUTF8StringEncoding]; // 添加参数 [request setHTTPBody:paramData]; // 4.发送请求,建立连接 NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSLog(@"data:%@",data); // 5.解析// 崩溃信息:reason: 'data parameter is nil' (说明接收到空信息,但是又解析了)// id temp = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil];// 加这些判断,可以减少程序蹦的概率 if (data != nil) { id temp = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingAllowFragments) error:nil]; NSLog(@"%@",temp); }else{ NSLog(@"网络故障,没有数据"); }}//post异步(一定要掌握)- (IBAction)postAsyn:(id)sender { NSLog(@"post异步"); // 1.准备URL NSString * urlStr = @"http://172.17.32.53/"; NSURL * url = [NSURL URLWithString:urlStr]; // 2.创建请求对象 NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30];// post类型的请求 [request setHTTPMethod:@"POST"]; // 3.准备参数 NSString * paramStr = @"userName=yan3&password=123";// 转换成NSData类型// 转成NSUTF8这种格式 NSData * paramData = [paramStr dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:paramData]; // 4.发送请求,建立连接 (get异步也可以用这个)// queue:[NSOperationQueue mainQueue] 是个操作队列,跟多线程有关 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { }]; NSLog(@"%@",paramData);}//只有get异步用#pragma mark -- NSURLConnectionDataDelegate 协议方法//1.已经接收到响应-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // 马上开始传数据了// response中包含了数据信息 // 初始化 _appendData = [NSMutableData data]; }//2.接收到数据-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ //这个数据不是一次性传完.这个方法会走多次// 我们要将data拼接起来 [self.appendData appendData:data];}// 3 数据接收完毕 -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ //接收好数据,处理。 //解析(异步get) //将接收到的数据转换为字符串类型的,然后输出 NSString * receiveStr = [[NSString alloc]initWithData:self.appendData encoding:NSUTF8StringEncoding]; NSLog(@"%@",receiveStr); } // 4 请求发生错误 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"%@",[error localizedDescription]); }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
0 0
- NEtWorking_四种数据请求方式
- NEtWorking_四种数据请求方法
- Hibernate的四种数据加载方式
- ios中的四种数据存储方式
- ios中的四种数据存储方式
- Hive四种数据导入方式介绍
- iOS 常用四种数据存储方式
- Hive四种数据导入方式介绍
- applicationContext 四种数据源获取方式
- Hive四种数据导入方式介绍
- Hive四种数据导入方式
- Hive四种数据导入方式介绍
- Android中的四种数据存储方式
- sap 四种数据共享方式
- Hive四种数据导入方式
- Hive四种数据导入方式
- Hive四种数据导入方式
- Hive四种数据导入方式
- Oracle学习笔记20150915常见循环语句以及goto语句
- TCP协议三次握手
- 浮躁的过去,开启的项目管理之路(一)
- SQL占用CPU100%
- KJframeforandroid框架之 KJBlog学习(三):
- NEtWorking_四种数据请求方式
- LEETCODE-Majority Element
- 数据结构-栈
- jstl标签库的运用
- 指针常量和常量指针
- Java中抽象类和接口的区别
- 中国十大热门网站榜中榜/Alexa综合排名TOP10(2015)
- +【CSS3】使用纯css代码实现图片轮播效果
- linux下的网络命令netstat