iOS 開發之 網絡編程(HTTP協議,NSURL-get post)

一、1、HTTP(超文本傳輸協議)HyperText Transfer Protocol。所有的WWW文件都必須遵守這個標準

     http是用於www(萬維網)瀏覽傳輸數據的一個協議

     訪問的是遠程的網站資源 格式是http://

2、HTTP協議的作用

(1)規定客戶端和服務器之間的數據傳輸格式

(2)讓客戶端和服務器能有效地進行數據溝通

3、爲什麼選擇使用HTTP

(1)簡單快速。因爲HTTP協議簡單,所以HTTP服務器的程序規模小,因而通信速度很快。

(2)靈活。HTTP允許傳輸任意類型的數據

(3)HTTP 是非連續連接 限制每次連接只處理一個請求 服務器對客戶端的請求做出響應後 馬上斷開連接 這種方式可以節省傳輸時間

4、HTTP的通信過程

(1)請求:客戶端向服務器索要數據

(2)響應:服務器返回客戶端相應地數據


*****

5、HTTP的請求方法 get post

(1)get 會把請求的內容 拼接到 鏈接地址 裏面(數據請求的時候 默認是get)

例如:www.baidu.com/user/login?username = 小明, password = 123

(2)get特徵

1>瀏覽器和服務器對URL長度有限制 因此在URL後面附帶的參數是有限制的 通常不能超過1KB

2>會把請求的數據 暴露在接口裏面


(3)post 參數全部放在請求體中

1>保證數據的安全

2>沒有具體的長度限制


6、選擇get和post的建議

(1)如果要傳輸大量數據 比如上傳文件 只能用post請求

(2)get的安全性比post要差些 如果包含機密/敏感信息 建議用post

(3)如果僅僅是索取數據(數據查詢) 建議使用get

(4)如果是增加、修改、刪除數據 建議使用post


7、URL:Uniform Resource Locator(統一資源定位符)

     通過1個URL 能找到互聯網上唯一的一個資源

8、通過URL獲得到URL裏面的內容(字符串)

(1)NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

         NSString *content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

9、通過URL獲得到URL裏面的data

 NSURL *url = [NSURL URLWithString:@"http://preview.quanjing.com/is_rm001/is0997q01.jpg"];

  NSData *data = [NSData dataWithContentsOfURL:url];

10、網絡請求

(1)同步請求

1>同步請求:等所有操作完全執行完畢 纔會繼續執行

2>同步請求的弊端:會遇到 假死的情況(只要請求的操作沒有完全執行完畢 就不會再去響應 任何事件(在同一線程))

NSURL *url = [NSURL URLWithString:@“http://preview.quanjing.com/is_rm001/is0997q01.jpg"];

//實例化請求對象 裏面攜帶着 請求的地址

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//    data 服務器響應返回的數據

//    NSURLConnection 發送請求的類

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];


(2)異步請求

1>異步請求:在程序運行的時候 會利用空閒的時間 去執行裏面的操作 不會影響到 同一線程裏面的其他操作

NSURL *url = [NSURL URLWithString:@“http://preview.quanjing.com/is_rm001/is0997q01.jpg”];

//實例化請求對象 裏面攜帶着 請求的地址

NSURLRequest *request = [NSURLRequest requestWithURL:url];

//發送一個異步請求 在quene 這個線程裏面去執行

    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

//        response:服務器迴應的內容(迴應狀態的code 以及error)

//        data:迴應給 客戶端 需要的數據

    // code

    }];

}


11、請求方法(get、post)

(1)get:把傳輸的數據 放在鏈接地址裏面

//    接口文件

    NSString *interfaceString = @"http://apis.baidu.com/showapi_open_bus/mobile/find";

//    請求內容

NSString *requestVontentString = @“num=1234456”;

//拼接地址

 NSString *urlString = [NSString stringWithFormat:@"%@?%@", interfaceString, requestVontentString];

//把連接地址字符串 轉成NSUTF8StringEncoding

 NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

//    可變請求 可以添加 請求方式 以及請求的 請求頭 或者更多

//    timeoutInterval 請求多少時間 超過 時間 不再發送 這個請求

//    cachePolicy 緩存內容的方式

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10 ];

//指定HTTP的請求方式

request.HTTPMethod = @“GET”;

 NSString *apiKey = @"e7f5ac9e7c42a6c8cb125ee1d7e8779e";

//    把apiKey 發送給 服務器 指定的請求頭位置

//    forHTTPHeaderField 需要的KEY 是服務器指定的key

    [request addValue:apiKey forHTTPHeaderField:@“apiKey"];

    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

//        解析 json 文件

//        把data 轉換成json 文件

 NSDictionary *info =  [NSJSONSerialization  JSONObjectWithData:data options: NSJSONReadingAllowFragments error:nil];


(2)post:post 參數全部放在請求體中

1>請求參數的接口地址

NSURL *url = [NSURL URLWithString:@"http://www.weihuok.com/customer2/GetService"];

2>請求的參數

//    PlatformType 設備類型 3表示iOS設備

    NSDictionary *dic = @{@"PlatformType “:@"3"};

3>可變請求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

4>設置HTTP請求方式

request.HTTPMethod = @“POST”;

5>設置請求的參數

//    HTTPBody 要的是data

//    dataUsingEncoding 把字符串 轉成data

    request.HTTPBody = [[NSString stringWithFormat:@"%@", dic] dataUsingEncoding:NSUTF8StringEncoding];

6>獲得服務器下發數據

[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

       NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error:nil];

    }];


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