iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法。我们先了解其中最为简单的同步GET方法请求。

首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下:

  1. #import <UIKit/UIKit.h>
  2. #import “NSString+URLEncoding.h”
  3. #import “NSNumber+Message.h”
  4. @interface MasterViewController : UITableViewController
  5. @property (strong, nonatomic) DetailViewController *detailViewController;
  6. //保存数据列表
  7. @property (nonatomic,strong) NSMutableArray* listData;
  8. //重新加载表视图
  9. -(void)reloadView:(NSDictionary*)res;
  10. //开始请求Web Service
  11. -(void)startRequest;
  12. @end

其中引入头文件NSString+URLEncoding.h文件是在程序中需要对URL进行编码处理。引入头文件 NSNumber+Message.h文件是处理把服务器返回消息代码转换为用户能看懂的消息。

  1. MasterViewController.m中的主要代 码如下:
  2. - (void)viewDidLoad
  3. {
  4. [super viewDidLoad];
  5. self.navigationItem.leftBarButtonItem = self.editButtonItem;
  6. self.detailViewController  = (DetailViewController *)
  7. [[self.splitViewController.viewControllers lastObject] topViewController];
  8. [self startRequest];                                                ①
  9. }
  10. #pragma mark – Table View
  11. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  12. return 1;
  13. }
  14. - (NSInteger)tableView:(UITableView *)tableView
  15. numberOfRowsInSection:(NSInteger)section {
  16. return self.listData.count;
  17. }
  18. - (UITableViewCell *)tableView:(UITableView *)tableView
  19. cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  20. UITableViewCell *cell
  21. = [tableView dequeueReusableCellWithIdentifier:@"Cell"
  22. forIndexPath:indexPath];
  23. NSMutableDictionary*  dict = self.listData[indexPath.row];
  24. cell.textLabel.text = [dict objectForKey:@"Content"];
  25. cell.detailTextLabel.text = [dict objectForKey:@"CDate"];
  26. return cell;
  27. }

其中第①行代码[self startRequest]调用自己的方法startRequest实现请求Web Service。MasterViewController.m中的startRequest方法代码如下:

  1. /*
  2. * 开始请求Web Service
  3. */
  4. -(void)startRequest
  5. {
  6. NSString *strURL = [[NSString alloc] initWithFormat:
  7. @”http://iosbook3/mynotes/webservice.php?email=%@&type=%@&action=%@”,
  8. @”<你的iosbook1.com用户邮箱>”,@”JSON”,@”query”];                           ①
  9. NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];             ②
  10. NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];               ③
  11. NSData *data  = [NSURLConnection sendSynchronousRequest:request
  12. returningResponse:nil error:nil];                       ④
  13. NSLog(@”请求完成…”);
  14. NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
  15. options:NSJSONReadingAllowFragments error:nil];
  16. [self reloadView:resDict];                                              ⑤
  17. }

此外,我们在前文中还提到了一个分类NSString (URLEncoding),它的作用是对URL编码和解码,它的代码如下:

  1. @interface NSString (URLEncoding)
  2. -(NSString *)URLEncodedString;
  3. -(NSString *)URLDecodedString;
  4. @end
  5. @implementation NSString (URLEncoding)
  6. - (NSString *)URLEncodedString
  7. {
  8. NSString *result = (NSString *)
  9. CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,①
  10. (CFStringRef)self,
  11. NULL,                           ②
  12. CFSTR(“+$,#[] “),                      ③
  13. kCFStringEncodingUTF8));
  14. return result;
  15. }
  16. - (NSString*)URLDecodedString
  17. {
  18. NSString *result = (NSString *)
  19. CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding
  20. (kCFAllocatorDefault,                                                 ③
  21. (CFStringRef)self, CFSTR(“”),                                       ④
  22. kCFStringEncodingUTF8));
  23. return result;
  24. }
  25. @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方法请求编程的更多相关文章

  1. ios网络学习------1get post异步请求

    网络请求的步骤: get请求: #pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark ...

  2. 网络处理1-异步GET请求

    前言 云计算 近几年来,云计算是一个非常热门的技术名词,很多专家认为,云计算会改变互联网的技术基础,甚至会影响整个产业的格局.可能还很多人不了解什么是云计算,简单来说,就是把用户的数据(比如文档.照片 ...

  3. iOS网络编程-ASIHTTPRequest框架同步请求-备用

    在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRe ...

  4. 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别

    一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...

  5. IOS网络编程:HTTP

    IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...

  6. iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理

    本章内容 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWluZ2h1YXdlbmthbmc=/font/5a6L5L2T/fontsize/400/fi ...

  7. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  8. iOS网络编程笔记——Socket编程

    一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...

  9. iOS 网络编程模式总结

    IOS 可以采用三类api 接口进行网络编程,根据抽象层次从低到高分别为socket方式.stream方式.url 方式. 一 .socket 方式 IOS 提供的socket 方式的网络编程接口为C ...

随机推荐

  1. Kinect For Windows V2开发日志七:照片合成与背景消除

    上一篇里讲到了Kinect可以从环境中区分出人体来.因此可以利用这个功能,来把摄像头前的人合成进照片里,和利用Photoshop不同的是,这样合成进去的人是动态且实时的. 简单的思路 BodyInde ...

  2. 关于JSON的总结

    本文总结自百度百科 JSON 语法规则 JSON 语法是 JavaScript 对象表示语法的子集. 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数 ...

  3. python 调用mysql存储过程返回结果集

    存储过程: delimiter | ),)) begin select * from tb_test where mid = imid and user = iuser; end; | delimit ...

  4. 上架第一个APP到苹果商店被拒绝5次

    - : Metadata Rejected (APP中的注册时跳转的 - 用户协议视图没有内容).Waiting For Review 6天  In Review 1天 第二次被拒绝 -- : Met ...

  5. How To Install Development Tools In Linux

      In this brief tutorial, we will be discussing how to install development tools in popular Linux di ...

  6. thinkphp,javascript跨域请求解决方案

    javascript跨域请求解决方案 前言 对于很多前端或者做混合开发的同学,我们难免会遇到跨域发起请求业务,比如A站点向B站点请求数据等等.由于最近要做一个站点集群的项目,所以具体业务要求很多个站点 ...

  7. 关于HTML中浮动与清除的思考

    布局时需要利用浮动(float)的属性,同时我们需要一个清除浮动(clear)与之配合才能达到预期的目标. w3s上关于float和clear的定义分别为:float:float 属性定义元素在哪个方 ...

  8. Android微信支付SDK开发笔记

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  9. PKIX: unable to find valid certification path to requested target

    // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = n ...

  10. 北大ACM(POJ1014-Dividing)

    Question:http://poj.org/problem?id=1014 问题点:抽屉原理.dfs.多重背包. Memory: 248K Time: 16MS Language: C++ Res ...