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 ...
随机推荐
- 怒刷DP之 HDU 1029
Ignatius and the Princess IV Time Limit:1000MS Memory Limit:32767KB 64bit IO Format:%I64d &a ...
- [wordpress]根据自定义字段排序并根据自定义字段查询
Wordpress中,根据根据自定义字段排序和查询是通过WP_Query()方法 如根据 一个自定义的sort的数字字段从小到大进行排序 $args = array( 'post_type' => ...
- asp.net MVC 如何隐藏 Response Header 版本号
根据借楼最少资源原则,有时候MVC需要隐藏自己的版本号,其实这里也是比较简单的,只需要在Global.ascx 的Application_Start()中添加一行代码既可 添加为 MVCHandle ...
- 【转载】理解OAuth 2.0
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 作者: 阮一峰 日期: 2014年5月12日 OAuth是一个关于授权(authorizat ...
- CefSharp 发布后在客户机上报找不到dll的问题
两个因素:一是与项目平台属性的选择要一致二是需要安装CefSharp对应的的VC++可发行组件包(用包管理器引用了此DLL后,会有一个readme.txt,上面详细介绍了CefSharp所需要的环境要 ...
- C#_枚举类型
C#中的枚举是名/值对的数据类型,下面是自定义的军衔等级的枚举 //定义枚举 enum MilitaryRank { Commander, ArmyCorpCommander, Military ...
- 七、Android学习笔记_JNI hello world
1.需要准备的工具,eclipse,cdt(c++)插件,cygwin(unix)和 android ndk. 在cygwin的etc目录下将ndk的路径引入到profile文件中,可以在cygwin ...
- Sass之初识
Sass is the most mature, stable, and powerful professional grade CSS extension language in the world ...
- SQL Server 远程备份数据库
在一些涉及到数据库的项目中,经常会有定时备份数据库的需要.定时备份到本机的话,还是挺容易的,计划任务就可以完成,但如果是整机挂了,那备份到本机是没意义的,那么就需要来考虑备份到局域网中,其它电脑里. ...
- SQL Server高级内容之case语法函数
1.Case函数的用法 (1)使用类似:switch-case与if-else if. (2)语法: case [字段] when 表达式 then 显示数据 when 表达式 then 显示数据 ...