iOS之HTTP网络编程
2016-02-25 21:42
543 查看
iOS之同步请求、异步请求、GET请求、POST请求
1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,知道服务器返回数据完成,才可以进行下一步操作;2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依旧可以对UI进行操作,程序可以继续进行;
3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
4、POST请求,将餐宿放在body里。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里,不易被捕获。
GET请求:
使用NSURLConnection创建异步下载请求。此时需要实现NSURLConnectionDelegate协议方法#define GET_URL @"http://192.168.2.2/service/downloadnote?user_name=" - (void)downloadData:(id)sender{ NSString* userNmae = @"wanghang"; //下载数据的URL NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",GET_URL,username]]; //创建请求对象 NSURLRequest* request = [NSURLRequest requestWithURL:url]; //创建URLConnection对象,并设置当前类的对象为代理 NSURLConnection* connection = [NSURLConnection alloc] initWithRequest:request delegate:self]; }
以下为常用的NSURLConnectionDelegate协议方法
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{ //此方法是请求链接失败时回调 } - (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{ //此方法是请求得到响应时调用 } - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{ //此方法是接收到数据后调用,一般在此对数据进行处理,例如解析 } - (void)connectionDidFinishLoading:(NSURLConnection*)connection{ //此方法是请求完成后调用,一般可以在此刷新UI }
POST请求:
使用NSURLConnection创建异步上传请求。此时需要实现NSURLConnectionDelegate协议方法#define POST_URL @"http://192.168.2.2/service/uploadnote?user_name=" - (IBAction)uploadData:(id)sender{ NSString* userName = @"wanghang"; //需上传的内容 NSString* content = @"这里是需要上传的数据"; NSData* postData = [content dataUsingEncoding:NSUTF8StringEncoding]; NSURL* URL = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",POST_URL,userName]]; NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPBody:postData];//设置请求体,即要上传的内容 [request setHTTPMethod:@"POST"];//设置请求方法为POST [request setValue:[NSString stringWithFormat:@"%d",postData.length] forHTTPHeaderField:@"Content-Length"]; NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; }
NSURLConnection的send方法实现同步和异步下载请求
#define URL @"192.168.2.1" //使用NSURLConnection的sendAsynchronousRequest方法创建异步下载请求 NSURL* url = [[NSURL alloc] initWithString:URL]; NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url]; NSOperationQueue* queue = [[NSOperationQueue alloc] init]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse* response,NSData* data,NSError* connectionError){ if (!connectionError) { NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str); } }]; //使用NSURLConnection的sendSynchronousRequest方法创建同步下载请求 NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];//该方法有数据类型为 nullable NSData * 的返回值 NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",str);
NSURLConnection的send方法实现同步和异步上传请求
//使用NSURLConnection的sendAsynchronousRequest方法创建异步上传请求 NSOperationQueue* queue = [NSOperationQueue mainQueue]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (!connectionError) { NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } }]; //使用NSURLConnection的sendSynchronousRequest方法创建同步上传请求 NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
总结一下:
1、实现网络数据的上传和下载在广义上有两种方式:同步和异步2、同步上传或下载使用的是NSURLConnection的sendSynchronousRequest方法
3、实现异步上传和下载有两种方式:
a.使用delegate方法[[NSURLConnection alloc] initWithRequest:request delegate:self]; 回调NSURLConnectionDelegate的几个方法
b.使用block块请求后的返回值直接在block块的参数中—sendAsynchronousRequest
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- HTTP Header 属性列表
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- nginx中http核心模块的配置指令2
- nginx中http核心模块的配置指令3
- nginx中http核心模块的配置指令4
- nginx中http的fastcgi模块的配置指令1
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 如何在 Linux 中快速地通过 HTTP 提供文件访问服务
- 深入HTTP head的使用详解
- ASP 中使用 HTTP 协议发送参数详解
- C#基于socket模拟http请求的方法