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):