NSURLConnection

NSURLConnection

  • 常用類
    • NSURL:請求地址
    • NSURLRequest:一個NSURLRequest對象就代表一個請求,包含的信息有
      • 一個NSURL對象
      • 請求方法(默認是GET)、請求頭、請求體
      • 請求超時
      • ...
    • NSMutableURLRequest:NSURLRequest的子類 (比如使用POST請求)
    • NSURLConnection
      • 負責發送請求,建立客戶端和服務器的連接
      • 發送數據給服務器,收集來自服務器的數據
      • 使用步驟
        • 1.創建一個NSURL對象,設置請求路徑
        • 2.傳入NSURL創建一個NSURLRequest對象,設置請求頭和請求體
        • 3.使用NSURLConnection發送請求
  • GET請求
    • 01.確定請求路徑NSURL
      • URLWithString:
    • 02.創建請求對象NSURLRequest
      • 該請求對象內部默認會提供請求頭和(請求體) |請求方法默認是GET
      • requestWithURL:
      • alloc initWithURL:
    • 03.使用NSRULConnection發送GET請求
      • 返回值就是響應體信息
      • 同步請求,開發中用的不多,網速比較慢的時候會卡住主線程sendSynchronousRequest:...
        • 參數一:請求對象
        • 參數二:響應頭信息(傳地址)
          • 初始化一個響應頭信息
        • 參數三:錯誤信息(傳地址)
          • 初始化一個錯誤信息
      • 異步請求不會卡住主線程sendAsynchronousRequest:...
        • 參數一:請求對象
        • 參數二:隊列,決定block塊在哪個線程中調用
        • 參數三:completionHandler完成(成功|失敗)之后的回調,response:響應頭信息,包含狀態碼、響應時間、請求路徑等信息;data:響應體信息;connectionError:錯誤信息
        • 怎么拿到狀態碼?
          • NSHTTPURLResponse是真實類型和NSURLResponse是繼承關系
          • 強轉NSHTTPURLResponse * res = (NSHTTPURLResponse*)response
          • res.statusCode
          • res.allHeaderFields所有響應頭信息
    • 04.解析服務器返回的數據
      • 看上去好像是字典,本質上字符串
      • 把二進制數據轉為字符串
        • allocinitWithData:encoding:UTF8
    • 05.修改配置文件:ATS
  • 通過代理發送異步請求
    • 01.確定請求路徑NSURL
      • URLWithString:
    • 02.創建請求對象NSURLRequest
      • 該請求對象內部默認會提供請求頭和(請求體) |請求方法默認是GET
      • requestWithURL:
      • alloc initWithURL:
    • 03.設置代理
      • 方法一:NSURLConnection alloc initWithRequest:delegate:
      • 方法二:NSURLConnection allocinitWithRequest:delegate:startImmdiately:YES
        • 如果設置startImmdiately為NO,怎么發送網絡請求?調用start方法發送網絡請求
      • 怎么拿到服務器返回數據?
      • 怎么取消請求? cancel
    • 04.遵守代理協議<NSURLConnectionDataDelegate>
    • 05.實現代理方法
      • 接收到服務器響應的時候調用connection:didReceiveResponse:
        • 初始化可變的數據
      • 接收到服務器返回的數據的時候調用connection:didReceiveData:
        • 該方法可能會調用多次
        • 拼接服務器返回的數據
      • 失敗的時候會調用connection:didFailWithError:
      • 請求完成的時候調用該方法connectionDidFinishLoading:
        • 解析數據
    • 代理使用場景:下載大文件的時候
    • 設置代理好處:監聽文件下載進度
  • POST

    • 發送一個異步請求
    • 01.確定請求路徑URLWithString:
    • 02.創建可變請求對象NSMutableURLRequest
      • requestWithURL:
      • 默認請求頭|請求方法(GET)
      • 2.1修改請求方法為POST.HTTPMethod = @"POST"
      • 2.2設置參數,設置請求體
        • username |pwd |type
        • .HTTPBody = 把字符串轉成二進制數據:[@"username = 1 &pwd = 1 & type = JSON" dataUsingEncoding];
      • 2.3設置其他屬性
        • 請求超時時間.timeoutInterval:如果在該時間段內沒有完成請求那么就認為請求失敗,開發中一般是15s或30s
        • 設置請求頭信息setValue:forHTTPHeaderField:應用場景:如果公司想要收集用戶的信息,可以通過客戶端的環境來收集User-Agent
        • 設置請求頭多條信息addValue:forHTTPHeaderField:
    • 03.發送異步請求
    • 04.解析服務器返回的數據
  • GET請求和POST請求的區別?

    • GET請求的步驟
      • 確定請求路徑(包含參數)
      • 創建請求對象
      • 使用NSURLConnection發送請求
    • POST請求
      • 確定請求路徑(不包含參數)
      • 創建可變的請求對象
      • 修改請求方法為POST
      • 設置請求體(設置參數)
      • 使用NSURLConnection發送請求
    • 請求路徑的區別
      • GET:協議頭://主機地址/接口名稱?參數1&參數2&參數3
      • POST:協議頭://主機地址/接口名稱
  • 中文轉碼處理
    • 確定請求路徑(包含參數)
      • username = 李 &pwd =li &type = JSON
      • 瀏覽器內部在發送網絡請求的時候會做中文轉碼處理
      • [urlStr stringByAddingpERCENTeSCAPESusingEncoding:NSUTF8StringEncoding]
      • URLWithString:
    • 創建請求對象
    • 使用NSURLConnection發送請求
    • 解析數據
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容