这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论。

  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的接口,比如说加密等
 

iOS网络请求基础的更多相关文章

  1. 【转载】一步一步搭建自己的iOS网络请求库

    一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...

  2. springmvc接口ios网络请求

    springmvc:   application/json;charset=utf-8的ios网络请求: 后台使用 @RequestBody注解参数接收:

  3. iOS 网络请求NSURLSession

    iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...

  4. IOS 网络请求

    技术交流新QQ群:414971585 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST.今天来看 ...

  5. IOS 网络请求方式

    iOS开发中的网络请求   今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...

  6. LXNetwork – 基于AF3.0封装的iOS网络请求库

    本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...

  7. IOS网络请求框架AFNetworking和ASIHttpRequest对比

    ASI基于CFNetwork框架开发,而AFN基于NSURL. ASI更底层,请求使用创建CFHTTPMessageRef进行,使用NSOperationQueue进行管理,ASIHTTPReques ...

  8. 自己动手写一个iOS 网络请求库的三部曲[转]

    代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大 ...

  9. IOS网络请求之NSURLSession使用

    前言: 无论是Android还是ios都离不开与服务器交互,这就必须用到网络请求,记得在2013年做iOS的时候那时候用的ASIHTTPRequest框架,现在重新捡起iOS的时候ASIHTTPReq ...

随机推荐

  1. MFC非模态对话框销毁

    非模态对话框需要重载OnCanel方法, 并调用DestroyWindow, 且不能调用基类的OnCanel重载PostNcDestroy, 需要delete掉this指针 // Overrides  ...

  2. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  3. oracle初始安装大小

    oracle初始安装大小 /ruiy/ocr/DBSoftware/app/oracle/ruiy/ocr/DBSoftware/app/oraInventory/ruiy/ocr/DBData/or ...

  4. lighttpd配置虚拟主机/php等WEB环境

    lighttpd(1.4.37)配置如下 server.document-root = "/var/www/lighttpd/" server.port = 8888 server ...

  5. Babelfish(二分)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 37238   Accepted: 15879 Descr ...

  6. hdu-4468-Spy-KMP+贪心

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4468 题目意思: 给你一个串r,求一个串s,使得s的前缀1+s的前缀2+s的前缀3+...+s的前缀 ...

  7. Jade 报错

    今天写jade的时候遇到一个问题 Invalid indentation,you can use tabs or spaces but not both问题 经过查证原来是 在jade模板中 同时存在 ...

  8. PHP去除Notice警告提示

    最近刚接触PHP,开发过程中可能会遇到Notice: Use of undefined ……这样的警告提示,可能是代码写的不太规范, 有两种解决途径:关闭 PHP 提示的方法, 搜索php.ini:e ...

  9. ORA-03113: 通信通道的文件结尾 进程 ID: 764 会话 ID: 125 序列号: 5

    昨天因为导入很久数据,最后一看是因为数据文件不够,后来就关机了.现在,开启数据库,总是报“ORA-03113: 通信通道的文件结尾” SQL> conn /as sysdba; 已连接到空闲例程 ...

  10. 实现单例模式C++版本

    还是先看最简单的C++单例模式 class CSingleton { private: CSingleton(){} static CSingleton *pInstance; public: sta ...