iOS 网络之NSURLConnection
2015-12-05 19:03
549 查看
<
bddf
p>从网络获取数据
一.请求方法介绍
1.同步请求方法:
+ (NSData )sendSynchronousRequest:(NSURLRequest )request returningResponse:(NSURLResponse * )response error:(NSError **)error;
2.异步请求方法:
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate ;
//此方法于上一个方法基本相同,只是该方法是实例方法
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
//此方法与上一方法相同只不过多了一个startImmediately参数,该参数控制是否立即发送请求
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;
//该方法需要指定NSOperationQueue参数,表明将请求交给指定的NSOperationQueue处理
+ (void)sendAsynchronousRequest:(NSURLRequest*) request
queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
//开始发送请求,只有当通过- (instancetype)initWithRequest: delegate: startImmediately:方法发送请求,且最后一个参数为no时,才需调用该方法
- (void)start;
二.请求实例
此处将用NSURLRequest和NSMutableURLRequest分别请求网络,前者只可向服务器发出简单的请求,不可以添加请求头以及请求参数,而后者则不同
NSURLRequest:
部分代码:
NSMutableURLRequest:
常用方法:
//该方法用于NSMutableURLRequest:添加请求头
-addValue:forHTTPHeaderField:
//该方法通过NSDictionary一次性为NSMutableURLRequest:设置多个请求头
setAllHTTPHeaderFields:
//设置请求参数
setHTTPBody:
//以NSInputStream为参数设置请求参数,该方法和上一方法只能设置一个
setHTTPBodyStream:
//设置请求方式:GET/POST
setHTTPMethod:
//设置http请求是否处理cookies
setHTTPShouldHandleCookies:
//为指定的请求头设置请求值
setValue: forHTTPHeaderField:
部分代码:
bddf
p>从网络获取数据
一.请求方法介绍
1.同步请求方法:
+ (NSData )sendSynchronousRequest:(NSURLRequest )request returningResponse:(NSURLResponse * )response error:(NSError **)error;
2.异步请求方法:
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate ;
//此方法于上一个方法基本相同,只是该方法是实例方法
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
//此方法与上一方法相同只不过多了一个startImmediately参数,该参数控制是否立即发送请求
- (instancetype)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately;
//该方法需要指定NSOperationQueue参数,表明将请求交给指定的NSOperationQueue处理
+ (void)sendAsynchronousRequest:(NSURLRequest*) request
queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler;
//开始发送请求,只有当通过- (instancetype)initWithRequest: delegate: startImmediately:方法发送请求,且最后一个参数为no时,才需调用该方法
- (void)start;
二.请求实例
此处将用NSURLRequest和NSMutableURLRequest分别请求网络,前者只可向服务器发出简单的请求,不可以添加请求头以及请求参数,而后者则不同
NSURLRequest:
部分代码:
- (void)viewDidLoad { [super viewDidLoad]; NSString* str = @"http://xxxxxxxxxxxxxxx"; totalData = [[NSMutableData alloc] init]; // 以指定NSString创建NSURL对象 NSURL* url = [NSURL URLWithString:str]; // 创建NSURLRequest对象 // NSURLRequest* request = [NSURLRequest requestWithURL:url]; // 通过这种方式创建的NSURLRequest可以指定缓存策略、超时时长 NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; // 以指定URL、delegate创建连接、发送请求 NSURLConnection* conn = [NSURLConnection connectionWithRequest:request delegate:self]; // 如果conn为nil,直接返回 if(conn != nil) { return; } } // 当服务器系响应生成时激发该方法。 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"--didReceiveResponse--"); NSLog(@"响应的数据类型:%@" , response.MIMEType); // 获取响应数据的长度,如果不能检测到长度,返回NSURLResponseUnknownLength(-1) NSLog(@"响应的数据长度为:%lld" , response.expectedContentLength); NSLog(@"响应的数据所使用的字符集:%@" , response.textEncodingName); NSLog(@"响应的文件名:%@" , response.suggestedFilename); } // 每次读取服务器响应的数据时,都会激发该方法。 // 对于一个请求而言,服务器数据可能要分几次才能读取,因此该方法将会被触发多次。 // 如果程序需要将这些数据转换成字符串,建议使用NSMutableData来收集这些数据、然后整体转换 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData* )data { [totalData appendData:data]; } // 当连接服务器出现错误时激发该方法。可通过error获取错误信息 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"-error--"); } // 当数据load完成时激发该方法,对于每次请求,该方法只会被激发一次。 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString* content = [[NSString alloc] initWithData:totalData encoding:NSUTF8StringEncoding]; NSLog(@"%@",content); }
NSMutableURLRequest:
常用方法:
//该方法用于NSMutableURLRequest:添加请求头
-addValue:forHTTPHeaderField:
//该方法通过NSDictionary一次性为NSMutableURLRequest:设置多个请求头
setAllHTTPHeaderFields:
//设置请求参数
setHTTPBody:
//以NSInputStream为参数设置请求参数,该方法和上一方法只能设置一个
setHTTPBodyStream:
//设置请求方式:GET/POST
setHTTPMethod:
//设置http请求是否处理cookies
setHTTPShouldHandleCookies:
//为指定的请求头设置请求值
setValue: forHTTPHeaderField:
部分代码:
NSMutableData* totalData; - (void)viewDidLoad { [super viewDidLoad]; NSString* str = @"xxxxxxxxxxxxxxxxx"; totalData = [[NSMutableData alloc] init]; // 以指定NSString创建NSURL对象 NSURL* url = [NSURL URLWithString:str]; // 创建NSURLRequest对象 // 通过这种方式创建的NSURLRequest可以指定缓存策略、超时时长 NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:5]; // 准备请求参数 NSString* post = [NSString stringWithFormat:@"name=%@&pass=%@" ,@"YJ" , @"IOS"]; // 将请求参数转换为NSData NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; // 设置请求的方式,默认发送GET请求。 [request setHTTPMethod:@"POST"]; // 添加2个请求头 [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setValue:@"xxxxx" forHTTPHeaderField:@"Content-Type"]; // 将请求数据设置为HTTP请求体 [request setHTTPBody:postData]; // 以指定URL、delegate创建连接、发送请求 NSURLConnection* conn = [NSURLConnection connectionWithRequest:request delegate:self]; // 如果conn为nil,直接返回 if(conn != nil) { return; } } // 当服务器系响应生成时激发该方法。 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"--didReceiveResponse--"); NSLog(@"响应的数据类型:%@" , response.MIMEType); // 获取响应数据的长度,如果不能检测到长度,返回NSURLResponseUnknownLength(-1) NSLog(@"响应的数据长度为:%lld" , response.expectedContentLength); NSLog(@"响应的数据所使用的字符集:%@" , response.textEncodingName); NSLog(@"响应的文件名:%@" , response.suggestedFilename); } // 每次读取服务器响应的数据时,都会激发该方法。 // 对于一个请求而言,服务器数据可能要分几次才能读取,因此该方法将会被触发多次。 // 如果程序需要将这些数据转换成字符串,建议使用NSMutableData来收集这些数据、然后整体转换 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData* )data { [totalData appendData:data]; } // 当连接服务器出现错误时激发该方法。可通过error获取错误信息 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"-error--"); } // 当数据load完成时激发该方法,对于每次请求,该方法只会被激发一次。 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString* content = [[NSString alloc] initWithData:totalData encoding:NSUTF8StringEncoding]; NSLog(@"%@",content); }
相关文章推荐
- 读书笔记——IOS之Web开发
- http请求状态码和请求信息的含义
- Stanford UFLDL教程 神经网络向量化
- Android6.0新特性----OKHttp请求
- 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014
- http_build_query()详细相关
- 介绍TCP/udp比较好的博客
- HTML5 块级元素与行内元素伦理片 http://www.dotdy.com/
- 151205http调试工具Charles Proxy用法详解
- android okhttp封装使用
- 17:网络编程
- 《TCP/IP详解 卷1:协议》 读书笔记 第十章 动态选路协议
- TCP/IP协议与OSI参考模型对应关系
- Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning
- Stanford机器学习---第四讲. 神经网络的表示 Neural Networks representation
- 深入分析JavaWeb Item9 -- HttpServletRequset详解
- linux网络连接配置
- JAVA通信编程(三)——TCP通讯
- JAVA通信编程(三)——TCP通讯
- UI基础-网络编程