UI 網絡請求

HTTP協議

HTTP協議,Hyper Text Transfer Protocol(超⽂本傳輸協議)是 ⽤於從萬維⺴服務器傳送超⽂本到本地瀏覽器的傳輸協議,HTTP是 ⼀個應⽤層協議,由請求和響應構成,是⼀個標準的客戶端服務器 模型。
http 3次握手 用戶連續向服務器3次發送一樣的請求 第三次服務器不再詢問,開始執行
url:統一資源定位符,也被成爲網址,因特網上標準的資源網址
url的符語法: 協議://授權/路徑?查詢
協議: ftp:// (文件傳輸協議) http://(超文本傳輸協議) https://(安全超文本傳輸協議) file://(本地文件協議)

GET與POST的區別:

GET:通過網址字符串 最多255字節
POST:使用NSData,容量超過1G
利用get請求 請求一個網址時 明文顯示(攜帶的信息不安全)
post: 數據被轉成NSData(二進制數據),類似於密碼的密文輸入,無法直接讀取.

連接方式:
同步連接: 會造成程序的卡頓(只有當請求完成 纔會恢復對界面的操作 用戶體驗很差)
異步連接:等待數據返回
異步連接有兩種實現方式: 設置代理 接收數據
實現block

GET請求
不管同步還是異步前面4步的步驟是一樣的

   // 1.網址中有中文的需要轉化一下格式  中文不能直接轉   沒有就不需要
NSString *newStr = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  // 2.把字符串的網址轉化爲網址對象
    NSURL *url = [NSURL URLWithString:newStr];
  // 3.創建一個請求
     // timeoutInterval  請求超時的時間  秒爲單位
  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10];
 // 4.設置一個請求的標誌 標識符很重要
    [request setHTTPMethod:@"GET"];


**同步時:**
 // 5.建立同步連接 並得到返回的數據
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
 後面兩個對象可以爲空   一個是服務器響應信息   一個是錯誤信息
 // 6.解析數據

**異步時:**
   代理方法:
 // 5.利用請求 創建一個異步連接
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
 // 6.開始連接
    [self.connection start]
 然後實現代理方法
   a.接收到服務器的響應信息時觸發的方法 連接成功裏面  創建data
   b.接收到數據觸發的方法(走很多次)多次觸發這個方法才能接收到完整的data  所以需要拼接一下data
    [self.data appendData:data];
   c.已經完成數據加載  觸發的方法  解析數據在這裏面進行  **如果在tableView上展示的話 注意刷新界面**
   d.請求失敗時觸發

block異步連接方法
    // [NSOperationQueue mainQueue]
    // 代表回到主線程
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 當數據請求完成的時候會指定 這個block
        NSLog(@"%@",data);
        // 判斷是否在主線程
        NSLog(@"%d",[NSThread isMainThread]);

    }];

POST與GET差不多,這不過POST的url與data是分開的
區別:POST請求 可以攜帶一個請求體

NSData *data = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:data];
其他是一樣的.

獲取服務器響應信息的長度 long long 類型的response.expectedContentLength
data.length 得到的data的長度
以獲取到data的形式得到image
UIImage *image = [UIImage imageWithData:self.data];

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