iOS基礎網絡編程學習筆記

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章