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数据的情况,
思路是这样的:
- 拿到请求路径url
- 封装请求对象(这里可以设置请求头或者请求体)
- 发送同步或者异步请求
废话不多说,一个根据城市名字获取天气情况的例子直接上代码:
//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数据的情况
思路:
- 拿到请求路径url
- 封装请求对象,这里用NSMutableURLRequest(是NSURLRequest的子类)
- 发送同步或异步请求
(TO DO...)这边先提供一个思路,后续会将调试成功的代码发上来
总结:现在大多公司与服务器间的数据传输都用的是HTTP协议,JSON去传输
如果刚好你们也是这样的话,可以自己封装一个类,专门去负责打包JSON,传输JSON,解析JSON,对外使用越简单越好
eg:sendHTTPMessage:(NSString*)message type:(NSString*)type url:(NSString*)url;