iOS網路請求基礎

来源:http://www.cnblogs.com/waterShuai/archive/2016/03/11/5265845.html
-Advertisement-
Play Games

這篇是關於網路請求的,結合公司的實際情況編寫,如果有不同意見歡迎留言共同討論。 iOS在9.0之後徹底放棄了NSURLConnection,現在已經改用了NSURLSession進行網路請求。一般現在網路請求也都是使用AFNetworking。下麵就把我自己關於afn和系統的api使用寫下來。 一.


  這篇是關於網路請求的,結合公司的實際情況編寫,如果有不同意見歡迎留言共同討論。

  iOS在9.0之後徹底放棄了NSURLConnection,現在已經改用了NSURLSession進行網路請求。一般現在網路請求也都是使用AFNetworking。下麵就把我自己關於afn和系統的api使用寫下來。

  一.使用NSURLSession

  移動端的網路請求主要是get請求和post請求, get和post請求步驟差不多,只不過post對於信息的傳送更安全,post請求會設置body而且會對body進行加密,保證傳輸的信息安全。

      NSString *urlString = BASE_PERSONAL_URL; // 設置請求網址
    NSURL *url = [NSURL URLWithString:urlString];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 創建請求

    // 參數拼接
      NSDictionary *bodyDic = @{@"password": md5Password, @"os": @"2", @"version": strSysVersion, @"models": phoneModel};
      NSArray *body = @[bodyDic];
      NSDictionary *parameter = @{@"head":head, @"body":body};
      request.HTTPMethod = @"Post"; // 設置請求方式
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; // 設置請求頭,返回類型
        NSLog(@"parameter ==== %@", parameter);
        
        NSData *data = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];
        // 因為需要對body體進行加密所以先把data轉化成字元串,如果不加密可略過次步
        NSString *bodyString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSData *bodyData = [[Base getHTTPBodyString:bodyString] dataUsingEncoding:NSUTF8StringEncoding]; // 對body體進行加密
    request.HTTPBody = bodyData; // 設置body體
    // 進行網路請求
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (!error) {
            
            // 因為回傳的信息也進行了加密所以也需要對返回的數據進行解密
            // 將data數據轉化成字元串進行解密
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSString *resault = [Base getHttpString:responseString];
            // 將解密後的字元串轉成data
            NSData *resaultData = [resault dataUsingEncoding:NSUTF8StringEncoding];
            // 使用json解析
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:resaultData options:NSJSONReadingMutableLeaves error:nil];
      
        } else {
            NSLog(@"%@", error);
        }
    }];

  // 網路請求開始
    [dataTask resume];

 請求方面基本是這樣的,至於加密的方式是公司內部協商確定的

 二 使用AFN

      AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    [sessionManager POST:urlString parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
    
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
        NSLog(@"response === %@", responseObject);

        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"data ====---0=-=0=0-=0=0-=0= %@", error);

    }];
    一般公司會根據實際情況對afn進行二次封裝,而不會直接調用afn的介面,比如說加密等
 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下麵是一些效果圖 下麵是代碼。有些枯燥 , 其實並不難 。 #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource> @prope
  • 廣播都寫了一大篇 這裡不能保存,一直提示有 //竊聽的 發個連接吧 https://github.com/ln0491/AndroidStudy/blob/master/%E5%AE%89%E5%8D%93%E7%AC%AC%E5%8D%81%E4%BA%8C%E5%A4%A9%E7%AC%94%E
  • 用於Android開發的免費類庫和工具集合,按目錄分類。 Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassActionBar v7 appcompat library 廣告 AdMob Google Mobi
  • android中的文件(圖片)上傳其實沒什麼複雜的,主要是對 multipart/form data 協議要有所瞭解。 關於 multipart/form data 協議,在 RFC文檔中有詳細的描述 [RFC 2388 Returning Values from Forms: multipart/
  • /** * 判斷當前時間是否處於某個時間段內 * * @param startTime 開始時間 * @param expireTime 結束時間 */ - (BOOL)validateWithStartTime:(NSString *)startTime withExpireTime:(NSStr
  • 本文從源碼角度剖析 RNA 中 Java <> Js 的通信機制(基於最新的 RNA Release 20)。 對於傳統 Java<>Js 通信而言,Js 調用 Java 通不外乎 Jsbridge、onprompt、log 及 addjavascriptinterface 四種方式,在 Java...
  • ReactNative官方中文文檔0.21,ReactNative官方中文文檔0.21.chm
  • interactivePopGestureRecognizer是iOS7推出的解決VeiwController滑動後退的新功能,雖然很實用,但是坑也很多啊,用過的同學肯定知道問題在哪裡,所以具體問題我就不描述了,這裡只給出如何完美解決interactivePopGestureRecognizer卡住
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...