美文网首页
iOS NSURLSession处理application/te

iOS NSURLSession处理application/te

作者: 小乙的乙 | 来源:发表于2019-12-10 11:09 被阅读0次

    AFNetWorking 无法实现的需求

    如今很多项目使用AFN来做网络请求,但是把SDK打包输出静态包的话,就不方便使用AFN来建构代码了。开发者集成SDK时,也需要在自己的工程也引入了AFN ,那么工程编译就会报符号表重复加载的错误。

    为了解决问题,并且增加SDK的可移植性,使用原生的 NSMutableURLRequestNSURLSession 来发网络请求更好一些,同时能够解决符号表重复加载的问题。

    server端为了安全对body全报文进行加密,使用Content-Type:application/text 类型的数据。这种需求AFN无法处理。AFN对我们常用的application/json数据处理的非常棒,默认能处理的类型有 application/json,text/json,text/javascript。

    // AFN 能处理的MediaType类型
    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
    

    原生实现 Content-Type:application/text 类型数据请求

    NSString *url = [NSString stringWithFormat:@"%@%@",IP, [data valueForKey:@"url"]];
        
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
        [request setValue:@"application/text" forHTTPHeaderField:@"Content-Type"];
        request.HTTPMethod = @"POST";
        // 参数
        NSDictionary *dictParams = [data copy];
        NSDictionary *params = [dictParams valueForKey:@"params"];
        NSDictionary *dictBody = [params valueForKey:@"body"];
        NSData *dataEncrypt = [aesEncryptString([self dictToJson:dictBody], key) dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:dataEncrypt];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            NSString *jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            id reault = aesDecryptString(jsonString, key);
            NSLog(@"dict = %@",reault);
            // 线程中处理回调
            dispatch_async(dispatch_get_main_queue(), ^{
                if (error) {
                    if (failure) {
                        failure(error);
                    }
                }else{
                    if (success) {
                        success(reault);
                    }
                }
            });
        }];
        [task resume];
    

    相关文章

      网友评论

          本文标题:iOS NSURLSession处理application/te

          本文链接:https://www.haomeiwen.com/subject/wogwgctx.html