IOS与服务器交互POST 和 GET 博客分类: ios post get NSURLConnectionDelegate NSURLConnection
程序员文章站
2024-03-15 16:54:00
...
背景介绍:
当开发IOS应用时,IOS端会和服务器进行交互。IOS端会向服务器传送数据,如:登录功能,注册功能,发送用户填写信息到服务器等功能,都会用到POST方法。也会从服务器获取数据,就会用到GET方法。接下来,我来讲述一下IOS端与服务器的交互过程:
当在某种需求下,我需要向服务器发送数据
NSURL *url = [NSURL URLWithString:@"http://xx/xx?user_id=xx&token=xx"];//设置请求的url NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST";//POST请求 request.timeoutInterval = 60; NSData *data = [NSJSONSerialization dataWithJSONObject:dic_test options:0 error:nil];//将发送数据转化成JSON(NSData类型) request.HTTPBody = data; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];//设置发送内容类型为 JSON NSURLConnection *connect = [NSURLConnection connectionWithRequest:request delegate:self]; [connect start]; [m_respond_data setLength:0];//设置接收POST结果的变量(NSMutableData类型)每次发送前先清空数据
实现NSURLConnectionDelegate的代理方法
// 当服务端提供了有效的数据来创建NSURLResponse对象时,代理会收到connection:didReceiveResponse:消息。 // 这个代理方法会检查NSURLResponse对象并确认数据的content-type,MIME类型,文件 名和其它元数据。 // 需要注意的是,对于单个连接,我们可能会接多次收到connection:didReceiveResponse:消息;这咱情况发生在 // 响应是多重MIME编码的情况下。每次代理接收到connection:didReceiveResponse:时,应该重设进度标识 // 并丢弃之前接收到的数据。 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSHTTPURLResponse *res = (NSHTTPURLResponse *)response; NSLog(@"%@",[res allHeaderFields]); } //接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次,将返回的数据全部接收到一起 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [m_respond_data appendData:data]; } //数据传完之后调用此方法 -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSDictionary *respond = [NSJSONSerialization JSONObjectWithData:m_respond_data options:NSJSONReadingMutableLeaves error:nil]; //根据数据信息将界面作出相应的处理 if ([[respond objectForKey:@"errcode"] isEqualToNumber:[NSNumber numberWithInt:0]]) { } } //网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"%@",[error localizedDescription]); }