您的位置:首页 > 理论基础 > 计算机网络

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

2015-10-14 16:03 706 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: