zoukankan      html  css  js  c++  java
  • iOS基础之网络请求相关

    1、AFNetwork二次封装方法一:

    #import <Foundation/Foundation.h>
    
    @interface BeeNetworkManager : NSObject
    
    /**
     *  POST网络请求
     *  每个请求都添加公共参数
     */
    + (void)POSTWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail;
    
    /**
     *  GET网络请求
     */
    + (void)GETWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail;
    
    @end
    #import "BeeNetworkManager.h"
    #import "AFNetworking.h"
    
    @interface BeeNetworkManager ()
    
    @end
    
    @implementation BeeNetworkManager
    
    + (void)POSTWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail
    {
        // SDK封装
        NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        configuration.protocolClasses = @[[ICG_SDK protolClass]];
        AFHTTPSessionManager* sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:configuration];
        
        [sessionManager.tasks makeObjectsPerformSelector:@selector(cancel)];
        
        NSString *urlStr = [BASE_URL stringByAppendingString:urlString];
        
        if (parameters == nil) {
            parameters = [NSMutableDictionary dictionary];
        }
        // 添加公共参数
        parameters = [self addPublicParametersWithDictionary:parameters];
        
        [sessionManager POST:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            success(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            fail(error);
        }];
    }
    
    + (void)GETWithUrlString:(NSString *)urlString parameters:(NSMutableDictionary *)parameters success:(void (^)(id responseObject))success fail:(void (^)(NSError *error))fail
    {
        // SDK封装
        NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        configuration.protocolClasses = @[[ICG_SDK protolClass]];
        AFHTTPSessionManager* sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:configuration];
        sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
        
        [sessionManager.tasks makeObjectsPerformSelector:@selector(cancel)];
        
        NSString *urlStr = [BASE_URL stringByAppendingString:urlString];
        
        if (parameters == nil) {
            parameters = [NSMutableDictionary dictionary];
        }
        parameters = [self addPublicParametersWithDictionary:parameters];
        
        [sessionManager GET:urlStr parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            success(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            fail(error);
        }];
    }
    
    /*---------- 公共参数 ----------*/
    + (NSMutableDictionary *)addPublicParametersWithDictionary:(NSMutableDictionary *)parameters
    {
        return parameters;
    }
    
    @end

    2、AFNetwork二次封装方法二:

    #import "AFHTTPSessionManager.h"
    
    @interface BeeCustomNetworkManager : AFHTTPSessionManager
    
    @end
    #import "BeeCustomNetworkManager.h"
    
    @implementation BeeCustomNetworkManager
    
    + (instancetype)manager
    {
        return [[self alloc] initWithBaseURL:nil];
    }
    
    - (instancetype)init
    {
        return [self initWithBaseURL:nil];
    }
    
    - (instancetype)initWithBaseURL:(NSURL *)url
    {
        // SDK封装
        NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
        configuration.protocolClasses = @[[ICG_SDK protolClass]];
        return [self initWithBaseURL:url sessionConfiguration:configuration];
    }
    
    - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))uploadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
    {
        // 拼接URL
        NSString *urlStr = [BASE_URL stringByAppendingString:URLString];
        // 设置公共参数
        if (parameters == nil) {
            parameters = [NSMutableDictionary dictionary];
        }
        parameters = [self addPublicParametersWithDictionary:parameters];
        
        return [super POST:urlStr parameters:parameters progress:uploadProgress success:success failure:failure];
    }
    
    - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters progress:(void (^)(NSProgress * _Nonnull))downloadProgress success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
    {
        // 拼接URL
        NSString *urlStr = [BASE_URL stringByAppendingString:URLString];
        // 设置公共参数
        if (parameters == nil) {
            parameters = [NSMutableDictionary dictionary];
        }
        parameters = [self addPublicParametersWithDictionary:parameters];
        
        return [super GET:urlStr parameters:parameters progress:downloadProgress success:success failure:failure];
    }
    
    /*---------- 公共参数 ----------*/
    - (NSMutableDictionary *)addPublicParametersWithDictionary:(NSMutableDictionary *)parameters
    {
        return parameters;
    }

    3、网络请求取消相关:

    取消请求:两种取消请求方式

    // 取消之前的所有请求,manager 还可以发请求
    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
    // 取消请求后,manager 再也不可用发请求了
    [self.manager invalidateSessionCancelingTasks:YES];
  • 相关阅读:
    Mac 配置自定义执行文件 pull.sh,push.sh
    vue-element-admin列表管理
    使用elementui图标
    Mac brew 启动php
    VUE , 表单中如何用获取接口数据的select
    Mac 如何关闭PHPstorm,双击shift快捷键
    spectacle 很好用的应用分屏工具Mac
    面对灵活的配置如何建表,使用json
    mac 下灵活管理node版本
    Node Sass version 6.0.0 is incompatible with^4.0.0
  • 原文地址:https://www.cnblogs.com/sjxjjx/p/6182739.html
Copyright © 2011-2022 走看看