免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1512 | 回复: 0
打印 上一主题 下一主题

[iOS] 基本网络请求 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-09 13:54 |只看该作者 |倒序浏览
本帖最后由 foxsi 于 2015-07-09 13:56 编辑

一、同步GET

// 1.将网址初始化成一个OC字符串对象

NSString *urlStr = [NSString stringWithFormat: @"%@?wewe=%@", @"111", @"222"];

// 2.如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 3.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];

// 4.创建网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

// 5.创建同步链接
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

二、异步GET

前四步基本一样
// 1.将网址初始化成一个OC字符串对象

NSString *urlStr = [NSString stringWithFormat: @"%@?wewe=%@", @"111", @"222"];

// 2.如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 3.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];

// 4.创建网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];

不同的是在这里我们创建的是异步请求链接

// 异步链接(形式1,较少用)
[NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
      //your code
    }]

一般的,当创建异步连接时, 很少用到第一种方式,经常使用的是代理方法。
// 异步连接(形式2)

[NSURLConnection connectionWithRequest:request delegate:self];

关于NSURLConnectionDataDelegate,我们经常使用的协议方法为一下几个:

// 服务器接收到请求时
- (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
{
    NSLog(@"%@", error);
}

三、同步POST

// 1.将网址初始化成一个OC字符串对象

NSString *urlStr = [NSString stringWithFormat:"%@?wewe=%@", @"111", @"222"];

// 2.如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 3.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];

// 4.创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 5.创建参数字符串对象
NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";

// 6.将字符串转为NSData对象
NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];

// 7.设置请求体
[request setHTTPBody:pramData];

// 8.设置请求方式
[request setHTTPMethod:"POST"];
     
// 9.创建同步链接
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];


四、异步POST
前八步基本一样

// 1.将网址初始化成一个OC字符串对象

NSString *urlStr = [NSString stringWithFormat:"%@?wewe=%@", @"111", @"222"];

// 2.如果网址中存在中文,进行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

// 3.构建网络URL对象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];

// 4.创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

// 5.创建参数字符串对象
NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";

// 6.将字符串转为NSData对象
NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];

// 7.设置请求体
[request setHTTPBody:pramData];

// 8.设置请求方式
[request setHTTPMethod:"POST"];

不同的是在这里我们创建的是异步请求链接
// 9.创建异步连接(形式2)
[NSURLConnection connectionWithRequest:request delegate:self];

执行相应的代理方法,即可完成数据的请求。

最后,分析一下这几种呢网络请求的区别。
GET请求和POST请求的区别:

1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔。POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器。

2. GET请求参数会出现在接口中,不安全。而POST请求相对安全。

3.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据。

同步和异步的区别:

同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。

异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP