zoukankan      html  css  js  c++  java
  • 封装的网络请求

    .h文件

    #import <Foundation/Foundation.h>

    /**

     * 请求成功的 Block

     @param responseObject 请求成功返回的数据

     */

    typedef void (^CJResponseSuccess)(id responseObject);

    /**

     * 请求失败的 Block

     @param error 报错信息

     */

    typedef void (^CJResponseFail)(NSURLSessionDataTask *task, NSError *error);

    /**

     * 上传或者下载进度

     @param progress 进度

     */

    typedef void (^CJProgress)(NSProgress *progress);

    /**

     * 返回新的Token

     @param newToken 新token

     */

    typedef void (^CJGetNewToken)(id newToken);

    @interface CJRequestManager : NSObject

    @property (nonatomic) NSString *asd;

    + (void)test111PostRequestWithUrl:(NSString *)suffixURL andHeaderDict:(NSDictionary *)headerDict andBodyDict:(NSDictionary *)bodyDict withSuccessBlock:(CJResponseSuccess)success andFailureBlock:(CJResponseFail)failure;

    + (void)testPostRequestWithUrl:(NSString *)suffixURL andHeaderDict:(NSDictionary *)headerDict andBodyDict:(NSDictionary *)bodyDict withSuccessBlock:(CJResponseSuccess)success andFailureBlock:(CJResponseFail)failure;

    /**

      * POST 请求

     @param suffixURL 请求路劲

     @param headerDict 请求参数头

     @param bodyDict 请求参数体

     @param success 成功返回

     @param failure 报错信息

     */

    + (void)postRequestWithUrl:(NSString *)suffixURL andHeaderDict:(NSDictionary *)headerDict andBodyDict:(NSDictionary *)bodyDict withSuccessBlock:(CJResponseSuccess)success andFailureBlock:(CJResponseFail)failure;

    /**

      * GET 请求

     @param suffixURL 请求路径

     @param params 参数

     @param success 成功返回

     @param fail 报错信息

     */

    + (void)getRequestWithSuffixURL:(NSString *)suffixURL andParameter:(NSDictionary *)params success:(CJResponseSuccess)success fail:(CJResponseFail)fail;

    /**

      * 下载文件

     @param suffixURL 下载地址

     @param fileURL 保存文件路径

     @param progress 进度

     @param success 下载成功返回

     @param fail 报错信息

     */

    + (void)downloadFileWithSuffixURL:(NSString *)suffixURL savePathURL:(NSURL *)fileURL progress:(CJProgress)progress success:(CJResponseSuccess)success fail:(CJResponseFail)fail;

    /**

     * 刷新Token fengyong

     @param oldToken 原来的Token

     @param userid 用户的id

    */

    + (void )refreshToken:(NSString *)oldToken withUserId:(NSString *)userid newToken:(CJGetNewToken)new_Token;

    @end

    .m文件

    #import "CJRequestManager.h"

    #import "AFNetworking.h"

    static NSString * const hostUrl = @"http://app.17ok.com/index.php";

    @implementation CJRequestManager

    + (void)getRequestWithSuffixURL:(NSString *)suffixURL andParameter:(NSDictionary *)params success:(CJResponseSuccess)success fail:(CJResponseFail)fail{

        

        AFHTTPSessionManager *manager = [CJRequestManager createSessionManager];

        

        NSString *requestURL = [hostUrl stringByAppendingString:suffixURL];

        [manager GET:requestURL parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            

            

            success(responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            

            fail(task, error);

        }];

    }

    +(void)testPostRequestWithUrl:(NSString *)suffixURL andHeaderDict:(NSDictionary *)headerDict andBodyDict:(NSDictionary *)bodyDict withSuccessBlock:(CJResponseSuccess)success andFailureBlock:(CJResponseFail)failure{

        

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        [manager.requestSerializer setValue:@"application/json"     forHTTPHeaderField:@"Content-Type"];

        manager.requestSerializer = [AFJSONRequestSerializer serializer];

        manager.responseSerializer = [AFJSONResponseSerializer serializer];

        

        NSMutableDictionary *requestDict = [NSMutableDictionary dictionary];

        if (headerDict == nil) {

            return;

        }

        

        [requestDict setObject:headerDict forKey:@"header"];

        if (bodyDict != nil) {

            [requestDict setObject:bodyDict forKey:@"body"];

        }

        

        NSString *requestURL = [NSString stringWithFormat:@"https://app.17ok.com:8443/financenews%@",suffixURL];

        

        [manager POST:requestURL parameters:requestDict progress:^(NSProgress * _Nonnull uploadProgress) {

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            

            success(responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            failure(task, error);

        }];

    }

    +(void)postRequestWithUrl:(NSString *)suffixURL andHeaderDict:(NSDictionary *)headerDict andBodyDict:(NSDictionary *)bodyDict withSuccessBlock:(CJResponseSuccess)success andFailureBlock:(CJResponseFail)failure{

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        [manager.requestSerializer setValue:@"application/json"     forHTTPHeaderField:@"Content-Type"];

        manager.requestSerializer = [AFJSONRequestSerializer serializer];

        manager.responseSerializer = [AFJSONResponseSerializer serializer];

        manager.requestSerializer.timeoutInterval = 14.f;

        NSMutableDictionary *requestDict = [NSMutableDictionary dictionary];

        if (headerDict == nil) {

            return;

        }

        

        [requestDict setObject:headerDict forKey:@"header"];

        if (bodyDict != nil) {

            [requestDict setObject:bodyDict forKey:@"body"];

        }

        

        NSString *urlStr = [NSString stringWithFormat:@"%@%@",hostUrl,suffixURL];

        CJLog(@"请求的url --------------------------------------------------------------------------%@",urlStr);

        CJLog(@"请求的数据体 --------------------------------------------------------------------------- %@",requestDict);

        [manager POST:urlStr parameters:requestDict progress:^(NSProgress * _Nonnull uploadProgress) {

            

        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            

            success(responseObject);

        CJLog(@"返回的参数 ------------------------------------------------------------------------ %@",responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            failure(task, error);

        }];

    }

    + (AFHTTPSessionManager *)createSessionManager{

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

        manager.requestSerializer = [AFJSONRequestSerializer serializer];

        manager.responseSerializer = [AFJSONResponseSerializer serializer];

        return manager;

    }

    + (id)responseConfiguration:(id)responseObject{

        NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

        string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];

        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

        return dic;

    }

    + (void)refreshToken:(NSString *)oldToken withUserId:(NSString *)userid newToken:(CJGetNewToken)new_Token{

        

        NSString *urlStr = @"/cjvuser/reflush";

        NSMutableDictionary *headerDic = [NSMutableDictionary dictionary];

        [headerDic setObject:userid forKey:@"userid"];

        [headerDic setObject:oldToken forKey:@"token"];

        

        NSMutableDictionary *bodyDic = [NSMutableDictionary dictionary];

        [self postRequestWithUrl:urlStr andHeaderDict:headerDic andBodyDict:bodyDic withSuccessBlock:^(id responseObject) {

            

    //        NSString * newToken = responseObject;

            new_Token(responseObject);

        } andFailureBlock:^(NSURLSessionDataTask *task, NSError *error) {

            CJLog(@"---- 刷新Toekn Error %@", error);

        }];

    }

    @end

  • 相关阅读:
    使用asp.net调用谷歌地图api
    JAVASCRIPT+DHTML实现表格拖动
    strcpy & memcpy区别
    python解析邮件的时候编码问题
    snprintf不能使用"字符串指针"赋值,可以使用字符数组
    二级结构体的赋值和访问方法
    C lstat major MAJOR 获得设备号
    C解析config
    C语言中的DEBUG
    opencv实例二:缩放一张图片
  • 原文地址:https://www.cnblogs.com/whx060900/p/8136120.html
Copyright © 2011-2022 走看看