iOS网络编程同步GET方法请求编程
iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。
首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下:
- #import <UIKit/UIKit.h>
- #import “NSString+URLEncoding.h”
- #import “NSNumber+Message.h”
- @interface MasterViewController : UITableViewController
- @property (strong, nonatomic) DetailViewController *detailViewController;
- //保存数据列表
- @property (nonatomic,strong) NSMutableArray* listData;
- //重新加载表视图
- -(void)reloadView:(NSDictionary*)res;
- //开始请求Web Service
- -(void)startRequest;
- @end
其中引入头文件NSString+URLEncoding.h文件是在程序中需要对URL进行编码处理。引入头文件 NSNumber+Message.h文件是处理把服务器返回消息代码转换为用户能看懂的消息。
- MasterViewController.m中的主要代 码如下:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- self.navigationItem.leftBarButtonItem = self.editButtonItem;
- self.detailViewController = (DetailViewController *)
- [[self.splitViewController.viewControllers lastObject] topViewController];
- [self startRequest]; ①
- }
- #pragma mark – Table View
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
- return 1;
- }
- - (NSInteger)tableView:(UITableView *)tableView
- numberOfRowsInSection:(NSInteger)section {
- return self.listData.count;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView
- cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- UITableViewCell *cell
- = [tableView dequeueReusableCellWithIdentifier:@"Cell"
- forIndexPath:indexPath];
- NSMutableDictionary* dict = self.listData[indexPath.row];
- cell.textLabel.text = [dict objectForKey:@"Content"];
- cell.detailTextLabel.text = [dict objectForKey:@"CDate"];
- return cell;
- }
其中第①行代码[self startRequest]调用自己的方法startRequest实现请求Web Service。MasterViewController.m中的startRequest方法代码如下:
- /*
- * 开始请求Web Service
- */
- -(void)startRequest
- {
- NSString *strURL = [[NSString alloc] initWithFormat:
- @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,
- @”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”]; ①
- NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]]; ②
- NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; ③
- NSData *data = [NSURLConnection sendSynchronousRequest:request
- returningResponse:nil error:nil]; ④
- NSLog(@”请求完成…”);
- NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
- options:NSJSONReadingAllowFragments error:nil];
- [self reloadView:resDict]; ⑤
- }
此外,我们在前文中还提到了一个分类NSString (URLEncoding),它的作用是对URL编码和解码,它的代码如下:
- @interface NSString (URLEncoding)
- -(NSString *)URLEncodedString;
- -(NSString *)URLDecodedString;
- @end
- @implementation NSString (URLEncoding)
- - (NSString *)URLEncodedString
- {
- NSString *result = (NSString *)
- CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,①
- (CFStringRef)self,
- NULL, ②
- CFSTR(“+$,#[] “), ③
- kCFStringEncodingUTF8));
- return result;
- }
- - (NSString*)URLDecodedString
- {
- NSString *result = (NSString *)
- CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding
- (kCFAllocatorDefault, ③
- (CFStringRef)self, CFSTR(“”), ④
- kCFStringEncodingUTF8));
- return result;
- }
- @end
第①行代码CFURLCreateStringByAddingPercentEscape函数是Core Foundation框架提供的C函数,可以把内容转换成为URL编码。第②行参数指定了将本身为非法URL字符不进行编码的字符集合,例如:“!* ()”等符号。第③行参数是将本身为合法URL字符需要进行编码的字符集合。
第③行代码CFURLCreateStringByReplacingPercentEscapesUsingEncoding函数是Core Foundation框架提供的C函数,它与上面CFURLCreateStringByAddingPercentEscape函数截然相反,是进行 URL解码的。第④行的参数指定不进行解码的字符集。
Foundation框架也提供了基于Objective-C的方法进行URL编码和解码,与 CFURLCreateStringByAddingPercentEscape函数对应的NSString方法是 stringByAddingPercentEscapesUsingEncoding。与 CFURLCreateStringByReplacingPercentEscapesUsingEncoding函数对应的NSString方法是 stringByReplacingPercentEscapesUsingEncoding:,由于这些方法不能自定义是否要编码和解码的字符集,因此 没有上面的函数灵活。
iOS网络编程同步GET方法请求编程的更多相关文章
- ios网络学习------1get post异步请求
网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...
- 网络处理1-异步GET请求
前言 云计算 近几年来,云计算是一个非常热门的技术名词,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局.可能还很多人不了解什么是云计算,简单来说,就是把用户的数据(比如文档.照片 ...
- iOS网络编程-ASIHTTPRequest框架同步请求-备用
在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRe ...
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
- IOS网络编程:HTTP
IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...
- iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理
本章内容 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWluZ2h1YXdlbmthbmc=/font/5a6L5L2T/fontsize/400/fi ...
- iOS网络编程模型
iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...
- iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...
- iOS 网络编程模式总结
IOS 可以采用三类api 接口进行网络编程,根据抽象层次从低到高分别为socket方式.stream方式.url 方式. 一 .socket 方式 IOS 提供的socket 方式的网络编程接口为C ...
随机推荐
- Spring学习总结四——SpringIOC容器四
一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...
- Win10 VMware虚拟机无法打开内核设备“\\.\Global\vmx86“
前几项与Win7配置相同 用管理员模式打开CMD 运行 net start vmci net start vmx86 net start VMnetuserif 这三条命令 为了不用每次启动都这样,修 ...
- OpenShare新功能@2014年10月
新功能@ Oct,2014 增强“应用中心”(就是“企业应用门户”功能):在Dock上增加“应用中心”图标,使得用户无论在任何页面,任何位置,永远都是点击一下即可进入任一企业应用,而无需回退到门户主页 ...
- slickgrid 一个优秀的JS表格插件
从熟悉JS以来,慢慢的喜欢上了这个门语言. 不自觉的,看了好多js的知识,可能也是因为做项目的原因吧. 这里稍微说下一个JS的grid插件 --slickgrid 了解这个插件也不是很多,稍微了解了下 ...
- sql语句中charindex的用法 可用于截取字符串
使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.这两个函数是如何运转的,解释他们的区别.同时提供一些例子,通过这些例子,你可以可以考虑使用这两个函数来解决很多不同的字符搜索的问题. ...
- 导航栏 UITabBarController等颜色的区别
//tint color是设置你选中的那个tabBar的颜色,默认是蓝色,点击是设置的红色 vc.tabBar.tintColor = [UIColor redColor]; // ...
- CSS3伪类
1.:last-child 比如:查找ul的最后一个li ul li:last-child { //样式 } 2.:first-child 比如:查找ul的第一个li ul li:first-chil ...
- java中Map,List与Set的区别
Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类 ...
- OpenGL第15,16,17讲小结
这三讲没有什么特别的感觉,15讲把纹理贴到3D字体上,16讲讲了雾的生成,17讲是通过以事先保存好的纹理贴图的字体来显示2D文字,这样子不用调用windows的字体,而是使用纹理中的字体.这样也在一定 ...
- Vs2010搭建directshow 环境
一:材料 1, vs2010 2, winsdk7.1 http://www.microsoft.com/en-us/download/details.aspx?id=8442 更具自己电脑选择32 ...