iOS 学习笔记——0003(iOS之HTTP协议网络传输)

http协议大概解释

http协议(Hypertext Transfer Protocol超文本传输协议,访问的是远程的网络资源,格式是http://)

大概解释,如图



http协议是无状态的协议,什么意思呢,就是服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间

http协议请求,包括请求行,请求头,请求体

     响应,包括状态行,响应头,响应体(这边具体内容可以百度)



常见的响应状态码:



http协议中最常用的是get和post请求方法(其他如put,delete等不常用的我也不了解)

get和post请求的区别(最大的区别):

get是在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如http://www.linshao.com/login?username=name&pwd=123&type=JSON

post是发给服务器的参数全部放在请求体中



http协议发送请求iOS实战

首先看下get请求方式,请求xml数据的情况,

思路是这样的:

  1. 拿到请求路径url
  2. 封装请求对象(这里可以设置请求头或者请求体)
  3. 发送同步或者异步请求

废话不多说,一个根据城市名字获取天气情况的例子直接上代码:

//1.拿到url,注意乱码问题的解决,WeatherWebService是自己定义的一个宏
NSString* urlStr = [NSString stringWithFormat:@"%@%@",WeatherWebService,[@"北京" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
//2.封装请求对象,这里没写请求方式,因为默认是get请求
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
//3.发送异步请求
NSOperationQueue* operationQueue = [[NSOperationQueue alloc]init];
NSURLConnection sendAsynchronousRequest:request queue:operationQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError){
 if (data) {//当有放回数据的时候再赋值
                 _respData = data;
                 [self performSelectorOnMainThread:@selector(fun) withObject:nil waitUntilDone:nil];
                 //NSLog(@"%@",[[NSString alloc]initWithData:_respData encoding:NSUTF8StringEncoding]);
            }
 }];

#import "GDataXMLNode.h" //谷歌提供的第三方库解析XML
GDataXMLDocument* doc = [[GDataXMLDocument alloc]initWithData:_respData options:0 error:nil];
GDataXMLElement *root = doc.rootElement;//获取根节点
NSArray *arr=[root elementsForName:@"string"];

下面是post请求方式,请求JSON数据的情况

思路:

  1. 拿到请求路径url
  2. 封装请求对象,这里用NSMutableURLRequest(是NSURLRequest的子类)
  3. 发送同步或异步请求

(TO DO...)这边先提供一个思路,后续会将调试成功的代码发上来



总结:现在大多公司与服务器间的数据传输都用的是HTTP协议,JSON去传输

   如果刚好你们也是这样的话,可以自己封装一个类,专门去负责打包JSON,传输JSON,解析JSON,对外使用越简单越好

   eg:sendHTTPMessage:(NSString*)message type:(NSString*)type url:(NSString*)url;

 

时间: 2024-10-12 13:47:10

iOS 学习笔记——0003(iOS之HTTP协议网络传输)的相关文章

iOS学习笔记(八)——iOS网络通信http之NSURLConnection

转自:http://blog.csdn.net/xyz_lmn/article/details/8968182 移动互联网时代,网络通信已是手机终端必不可少的功能.我们的应用中也必不可少的使用了网络通信,增强客户端与服务器交互.这一篇提供了使用NSURLConnection实现http通信的方式. NSURLConnection提供了异步请求.同步请求两种通信方式. 1.异步请求 iOS5.0 SDK NSURLConnection类新增的sendAsynchronousRequest:queu

【iOS学习笔记】iOS中的MVC设计模式

模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中.在iOS开发中MVC的机制被使用的淋漓尽致,充分理解iOS的MVC模式,有助于我们程序的组织合理性. 模型对象模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算.例如,模型对象可能是表示游戏中的角色或地址簿中的联系人.用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达

【转】iOS学习笔记(八)——iOS网络通信http之NSURLConnection

移动互联网时代,网络通信已是手机终端必不可少的功能.我们的应用中也必不可少的使用了网络通信,增强客户端与服务器交互.这一篇提供了使用NSURLConnection实现http通信的方式. NSURLConnection提供了异步请求.同步请求两种通信方式. 1.异步请求 iOS5.0 SDK NSURLConnection类新增的sendAsynchronousRequest:queue:completionHandler:方法,从而使iOS5支持两种异步请求方式.我们先从新增类开始. 1)se

iOS学习笔记之UITableViewController&UITableView

iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论文,因此需要继续思考新的算法.这是一件挺痛苦的事情,特别是在很难找到与自己研究方向相关的文献的时候.也许网格序列水印这个课题本身的研究意义就是有待考证的.尽管如此,还是要努力的思考下去.由于实验室的原因,iOS的学习进度明显受到影响,加之整理文档本身是一件耗费时间和精力的事情,因此才这么久没有写笔记了. M

iOS学习笔记-精华整理

iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁. 2-成员属性:     readonly:不指定readonly,默认合成getter和setter方法.外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全

iOS学习笔记---oc语言第四天

字符串 数组 一.使用苹果帮助文档 学会使?用苹果帮助?文档是开发者的?一项技能 Inherits from 继承?自 Conforms to 遵循什么协议 Framework 属于哪个框架 Availability 什么时候可?用的 Declared in 声明在什么头文件?里 Related documents 相关文档 Sample code ?示例代码 快速打开帮助文档 在代码中,将?鼠标停留在 类名或者?法名上,option+?鼠标左键,点击 Reference的超链接进?入帮助?文档

iOS 学习笔记——0005(数据存储)

先发一个练手的小demo,自己写的简略通讯录,已上传至github https://github.com/liaoshaolim/addressBook 1.NSKeyedArchiver:(归档) 这里用一个添加联系人的例子来说明: 注意:归档形式保存数据,需要该对象遵守NSCoding协议,而且对应的必须提供encodeWithCoder和initWithCoder方法 因为归档是一次性的,解压也是一次性的,所以小量的ok,如果量大的话,改一个小地方就要归档或解压全部,效率会比较低 //用一

iOS学习笔记20-地图(二)MapKit框架

一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种方式可以对地图进行精准的控制 调用苹果官方自带的地图应用,主要用于一些简单的地图应用,无法精确控制 使用第三方地图开发SDK库 用得最多的还是MapKit,所以这节就只讲MapKit的使用. 二.MapKit核心类 MapKit的核心类为地图展示控件MKMapView,以下是常用的属性.对象方法以及

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON