iOS进行网络交互的过程是在Web Service应用层进行的,而Web Service采用的Http和Https协议
1.Http概述:
Http(Hypertext Transfer Protocol)是超文本传输协议,基于TCP/IP协议之上的应用层的协议。Http协议支持C/S网络结构,是无连接协议,即是每次都有请求建立连接,当服务器处理完客户端请求,应答完成后就会断开链接,不会一直占用网络链接。
请求步骤:
- 建立TCP/IP连接;
- 发送Http请求;
- 接受Http应答响应;
- 断开TCP连接。
iOS中为我们提供了请求网络和返回网络响应的类,分别为NSURLRequest(NSMutableRequest)和NSURLResponse(NSMutableResponse)(Android提供类有HttpURLConnection和HttpResponse相对应)。
URL(Uniform Resource Locator)是统一资源定位,通过一个URL可以找到互联网中唯一的一个网络资源,一个URL的描述:http://hostname:port/absolute path?query
- http代表网络协议,此外还有FTP和FILE协议;
- hostname代表服务器端名称;
- port代表服务器端端口号;
- absolute path代表请求的绝对路径;
- query代表请求的具体参数。
iOS中使用NSURL类管理URL。
2.HTTP常用方法和使用:
HTTP协议有八种请求方式GET/POST/HEAD/PUT/DELETE/TRACE/CONNECTION:
- GET:向特定资源发出请求,将参数直接写在URL中,安全性较差;
- POST:向特定资源提交数据进行处理请求,请求的参数包含的请求消息体(body)能保护数据的安全;
- HEAD:向特定服务器要与GET请求一致响应的信息头中的元信息;
- PUT:向 特定资源上传最新内容;
- DELETE:请求服务器删除Request-URL所表示的资源。
创建同步的get请求方式:
NSURL *url = [NSURL URLWithString:@"URL"];
//创建get请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:request cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100];
//创建一个同步的请求
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
缓存策略有:
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
ASIHttpRequest方式:
导库libxml2.2.dylib/libz.1.2.5.dylib/SystemConfiguration.framework/MobileCoreServices.framework/CFNetork.framework:
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
}
创建异步的get请求方式,将返回结果在代理方法中去处理:
NSURL *url = [NSURL URLWithString:@"URL"];
//创建get请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:request cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100];
//创建一个异步的请求
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
创建同步的post请求方式:
NSURL *url = [NSURL URLWithString:@"URL"];
//创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:request cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100];
[request setHTTPMethod:@"POST"];
//设置请求参数
NSString *str = @"type=focus-c";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//连接服务器
NSData *resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *result = [[NSString alloc]initWithData:resultData encoding:NSUTF8StringEncoding];
创建异步的post请求方式,将返回结果在代理方法中去处理:
NSURL *url = [NSURL URLWithString:@"URL"];
//创建请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:request cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100];
[request setHTTPMethod:@"POST"];
//设置请求参数
NSString *str = @"type=focus-c";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
//连接服务器
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:data delegate:self];
3.Json解析:
Apple提供的Json解析方式有NSJSONSerialization,也有第三方解析库JSonKit/SBJson(Android的json解析库Google提供的Gson和阿里提供FastJson):