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;

 

 

posted @ 2015-10-14 16:03  林_少  阅读(966)  评论(3编辑  收藏  举报