iOS网络编程之NSURLConnection

一、网络访问流程

1、指定资源路径NSURL

1>URL是依赖于服务器上的资源的,不能随意修改

2>就是一个能够指定服务器资源的路径字符串

2、封装连接请求NSURLRequest/NSMutableRequest

1>GET请求URL组成

url字符串+?+参数

a.用NSRequest封装请求,就是创建请求对象

NSString *urlString = [NSString stringWithFormat:@"http://192.168.19.45/login.php?username=%@&password=%@", name, pwd];

NSURL *url = [NSURL URLWithString:urlString];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

b.“?”表示后面紧跟若干参数

c.多个参数用&连接

d.参数格式:变量名=数值

2>POST请求

a.用NSMutableRequest封装请求,创建请求对象

NSURL *url = [NSURL URLWithString:@"http://192.168.19.45/login.php"];

i>简单方法

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

ii>参数较多方法

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30];建议使用30s以提高用户体验


requestWithURL 参数:

     

cachePolicy(策略)

NSURLRequestUseProtocolCachePolicy = 0,            // 默认

     

NSURLRequestReloadIgnoringLocalCacheData = 1,      // 忽略本地数据,每次都从网络加载

                                                        // 实时更新要求强的,股票,球赛,彩票

NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Un(没有)implemented(实现)

NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

                                                        // 同选项 1

     

     // 做本地缓存以及离线数据需要使用,用户手机没有上网,打开之后,又希望用户不要太无聊

     // 使用场景,需要判断用户当前手机的联网状态,根据联网状态来判断具体的缓存策略

     // 提示:尽量不要做支持离线的应用!尽量要把用户拉到网上来,只有上网了,才有办法挣钱!

     NSURLRequestReturnCacheDataElseLoad = 2,           // 如果有缓存,就用缓存,否则上网

     NSURLRequestReturnCacheDataDontLoad = 3,           // 只返回缓存数据,不上网

     

     NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented

     

     timeoutInterval: 访问网络的超时时长,当超过指定时间后,提示用户!

     iOS的网络请求中,默认的超时时长是 60 秒,建议的超时时长可以调整到2030秒,可以提高用户体验



b.指定网络请求的方法(设置HTTPMethd属性)


c.设置数据体属性(设置参数)

i>参数的设置是通过数据体实现的

ii>参数的格式是与GET格式一样的

iii>实现办法就是给请求的HTTPBoby属性赋值(NSData类型的,通常用字符串转过去的)

// 2.2 数据体,通过firebug跟踪,格式和get的格式是一样的

NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", name, pwd];

// 通过设置HTTPBody属性,就能够设置请求中要发送给服务器的参数

// NSString 转换成 NSData

request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

3、向服务器发送连接请求,并或得服务器返回的二进制数据NSURLConection

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

   //一些处理操作

    }];

参数解析

queue:标识的是后面的completionHandler块代码执行队列,并不是用来表示网络连接操作的,事实上只要使用了sendAsynchronousRequest:::的方法连接网络,网络请求的过程会被自动放入新的线程异步执行


[[NSOperationQueue alloc] init] 异步执行块代码

[NSOperationQueue mainQueue] - 主线程执行块代码     

举例:在网络访问结束后,有时候,会做后续的耗时操作的处理,例如:从网络下载一个压缩文件,

在完成块代码中,需要首先解压缩文件-耗时的操作,不需要UI更新,此时可以指定异步执行


二、注意

1、在使用GET的时候不需要指定网络请求的方法是GET还是POST,因为默认的方法就是GET,但是在使用POST的时候一定指定网络请求的方法

2、GET和POST都可以设定参数,但是参数的设置时机不一样,GET将参数封装在url中,很不安全,POST则是封装在数据体中相对安全的多(url是很容易拿到的,拿到服务器的请求日志,一目了然)

2、POST请求的封装要使用NSMuatbbleRequest,因为要指定请求的方法和数据体

3、POST方法体是二进制数据dataUsingEncoding:

4、网络返回的也是二进制数据,要经过处理才能使用的

5、GET比POST的效率高,通常使用GET,但是一旦是涉及到用户的隐私的东西一定使用POST(银行卡号,密码)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值