请求方式 :
1. GET
(1) 通过网址字符串给服务器传输数据
(2) 传输数据网址字符串最大255字节
(3) 安全性 : 所有传输给服务的数据, 显示在网址里, 类似于密码的铭文输入, 直接可见
2. POST
(1) 通过data给服务器传输数据
(2) 传输数据使用NSData,容量超过1G
(3) 数据被转成NSData ( 二进制数据 ),类似于密码的密文输入, 无法直接读取
同步GET 和 同步 POST 异同
同步GET :
1. 创建一个地址字符串, 注意 : 不能有空格
2. 创建一个统一资源定位符
3. 创建一个NSURLRequest, 并配置缓存策略和超时时间
4. 通过一个NSData对象获取网络请求数据
同步POST :
1. 创建一个地址字符串, 注意 : 不能有空格
2. 创建一个统一资源定位符
3. 使用NSMutableURLRequest : 因为之后要对request做修改
4. 创建一个上传数据的字符串, 并且转成NSData对象
5. 设置请求方式
6. 设置上传的Data
7. 通过一个NSData对象获取网络请求数据
缺点 : 会造成程序的卡顿, 所以在开发时候不推荐使用 !
-- 代码实现 同步 异步 GET POST (代理 , block 两种方式 (推荐使用 block) )
#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> @property (nonatomic, strong) NSMutableData *resultData; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } //get同步 // 开发中 不推荐使用同步网络请求 - (IBAction)getT:(id)sender { //地址字符串 NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; //统一资源定位符(URL) NSURL *url = [NSURL URLWithString:urlString]; // 第一个参数 : 统一资源定位符 // 第二个参数 : 缓存策略 // 第三个参数 : 超时时间 /** NSURLRequestUseProtocolCachePolicy : 基础缓存策略 *常用 NSURLRequestReloadIgnoringLocalCacheData : 忽略本地缓存 NSURLRequestReloadIgnoringLocalAndRemoteCacheData : 忽略本地缓存, 无论本地是都有缓存, 都从网络下载 NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData : 如果本地缓存有效, 则不下载, 无效则去下载 *常用 NSURLRequestReturnCacheDataElseLoad : 优先的使用本地缓存, 如果本地没有缓存, 则去下载 NSURLRequestReturnCacheDataDontLoad : 从不下载, 只使用本地缓存, 如果没有则请求失败. 多用于离线环境 *最常用 NSURLRequestReloadRevalidatingCacheDataUnimplemented : 验证本地数据和网络数据是否相同, 如果不同, 则去下载, 如果相同, 则使用本地数据 */ NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0f]; //NSURLConnection 在iOS9.0之后 不推荐使用 // 第一个参数 : NSURLRequest类型的对象 // 第二个参数 : 存储的是一些网略请求的信息, 一般为nil(包体) // 第三个参数 : 错误信息 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; NSLog(@"dic == %@", dic); } //post同步 - (IBAction)postT:(id)sender { NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; //创建一个字符串 NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; //把这个字符串转换成NSData类型的对象 NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; //设置请求方式 方式为大写的 如 : POST GET //GET请求可以不设置, 但是POST请求必须要设置 [urlRequest setHTTPMethod:@"POST"]; //把需要上传的data放进request里面 [urlRequest setHTTPBody:postData]; NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; NSLog(@"dic == %@", dic); } //get异步 - (IBAction)getY:(id)sender { NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; //代理的异步网络请求 (GET) //第一个参数 : NSURLRequest //第二个参数 : 代理人 [NSURLConnection connectionWithRequest:request delegate:self]; //调回带有block回调的方法, 执行网络请求 // 第一个参数 : NSURLRequest // 第二个参数 : block块里面的代码在哪个线程执行 // [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { // // //response 携带的是接口的一些信息 // //data 请求下来的数据, 需要使用的 // //connectionError 错误信息 // if (connectionError == nil) { // NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; // NSLog(@"dic == %@", dic); // //这里应该刷新UI了 // //1. 给数据源数组赋值 // //2. 赋值结束之后, 刷新UI ([self.tableView reloadData]) // } // }]; } //post异步 - (IBAction)postY:(id)sender { NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; NSURL *url = [NSURL URLWithString:urlString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:postData]; [NSURLConnection connectionWithRequest:request delegate:self]; // NSString *urlString = @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"; // NSURL *url = [NSURL URLWithString:urlString]; // NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // NSString *dataString = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"; // NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding]; // [request setHTTPMethod:@"POST"]; // [request setHTTPBody:postData]; // // [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { // if (connectionError == nil) { // NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; // NSLog(@"dic == %@", dic); // } // }]; } #pragma mark - NSURLConnectionDataDelegate // 服务器开始响应 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // 初始化保存结果的data self.resultData = [NSMutableData data]; } // 接收到数据 // 这个方法会重复的执行, 所以可能拿到一段一段的数据. 这就需要我们把这些数据拼接起来 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // 为了防止 拿到的数据不全, 所以把拿到的数据拼接到保存结果的data中. [self.resultData appendData:data]; } // 结束响应 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil]; NSLog(@"dic == %@", dic); // 更新数据源数组 //刷新UI } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
时间: 2024-11-13 09:40:02