• iOS 网络请求封装类


        此类名为CWSingleSample,只为方便自己修改, 添加方法所记录!

      CWSingleSample.h

    //
    //  CWSingleSample.h
    //  students
    //
    //  Created by ZKSoft on 14/11/13.
    //  Copyright (c) 2014年 ZK. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "AFHTTPClient.h"
    #import "MBProgressHUD.h"
    #import "AFHTTPRequestOperation.h"
    #import "ASIHTTPRequest.h"
    //请求成功时的回调block
    typedef void (^getDataBlock)(id data);
    //请求失败时的回调block
    typedef void (^getErrorBlock)(NSError* error);
    //上传文件时的回调block
    typedef void (^getFileBlock)(NSString* fileName,id data);
    //接口枚举
    typedef enum {
       CWSMSSEND=0,//短信验证码发送
       CWUSERREGISTER,//用户注册
       CWUSERLOGIN,//用户登录
      CWPASSWORDDEAL,//密码修改/找回密码
       CWUPDATEUSERINFO,//用户信息修改
       CWADDUPDATEDRIVER,//驾驶员信息修改/新增
       CWQUERYDRIVER,//驾驶员信息查询
       CWDELETEDRIVER,//删除驾驶员信息
       CWAPPLYLOAN,//贷款申请
       CWQUERYLOANINFO,//贷款信息列表查询
       CWDELETELOANINFO ,//撤销贷款请求
        CWUPLOADRELATIVE//通讯录上传
    } WKNetInterface;
    
    
    @interface CWSingleSample : NSObject<ASIHTTPRequestDelegate>
    +(CWSingleSample *)sharedSingleSample:(UIViewController *)myViewController;
    
    @property (nonatomic,strong) MBProgressHUD* ssHUD;
    @property (nonatomic,strong) UIViewController *myViewController;
    /**
     *请求简化版
     */
    -(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock;
    -(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withValue:(NSDictionary *)value withFinish:(getDataBlock)dataBlock;
    
    /**
     *统一的http请求,参数:请求的标示名称,请求的参数串,请求成功的回调,请求失败的回调
     */
    -(void)myNetWork:(WKNetInterface)myInterface withValue:(NSDictionary *)value withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock withError:(getErrorBlock)errorBlock;
    /**
     * 上传文件
     * @param flag 是否需要保存数据
     */
    -(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag;
    
    /**
     *上传图片
     */
    -(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag;
    
    /**
     * 文件上传
     * @param thUpFilePath 文件路径
     * @param url 服务器地址
     * @param finishBlock 请求成功
     * @param errorBlock 请求错误
     */
    -(void)myUploadFile:(NSString *)theUpFilePath withFileUrl:(NSString *)url withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock;
    
    /**
     *语音文件下载
     * @param url 请求地址
     * @param path 下载文件存放的路径
     */
    -(void)downLoadVoiceUrl:(NSString *)url withDownloadPath:(NSString *)path;
    @end
    

     CWSingleSample.m

    //
    //  CWSingleSample.m
    //  students
    //
    //  Created by ZKSoft on 14/11/13.
    //  Copyright (c) 2014年 ZK. All rights reserved.
    //
    
    #import "CWSingleSample.h"
     
    @implementation CWSingleSample
    static CWSingleSample *sharedSingleSample=nil;
    +(CWSingleSample *)sharedSingleSample:(UIViewController *)myViewController{
        
        @synchronized(self)
        {
            if (!sharedSingleSample){
                sharedSingleSample = [[CWSingleSample alloc] init];
                sharedSingleSample.myViewController=myViewController;
                //初始化进度框,置于当前的View当中
                sharedSingleSample.ssHUD = [[MBProgressHUD alloc] initWithView:[[[UIApplication sharedApplication] delegate] window]];
                [[[[UIApplication sharedApplication] delegate] window] addSubview:sharedSingleSample.ssHUD];
                
                //如果设置此属性则当前的view置于后台
                sharedSingleSample.ssHUD.dimBackground = YES;
                
            }
            return sharedSingleSample;
        }
    }
    
    -(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock{
        [self myNetWork:myInterface withValue:nil withUrl:strUrl withFinish:dataBlock withError:nil];
    }
    -(void)myNetWork:(WKNetInterface)myInterface withUrl:(NSString *)strUrl withValue:(NSDictionary *)value withFinish:(getDataBlock)dataBlock{
        [self myNetWork:myInterface withValue:value withUrl:strUrl withFinish:dataBlock withError:nil];
    }
    -(void)myNetWork:(WKNetInterface)myInterface withValue:(NSDictionary *)value withUrl:(NSString *)strUrl withFinish:(getDataBlock)dataBlock withError:(getErrorBlock)errorBlock{
        //配置请求接口
        NSArray *interTemp=@[
                            @"smsSend",//短信验证码发送
                            @"userRegister",//用户注册
                            @"userLogin",//用户登录
                            @"passwordDeal",//密码修改/找回密码
                            @"updateUserInfo",//用户信息修改
                            @"addUpdateDriver",//驾驶员信息修改/新增
                            @"queryDriver",//驾驶员信息查询
                            @"deleteDriver",//删除驾驶员信息
                            @"applyLoan",//贷款申请
                            @"queryLoanInfo",//贷款信息列表查询
                            @"deleteLoanInfo",//撤销贷款请求
                            @"uploadRelative"//通讯录上传
                             ];
        value=value==nil?@{}:value;
        //配置请求
        NSURL *requestUrl=[NSURL URLWithString:CWBaseURLString];
        AFHTTPClient *client=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
        
        if (myInterface==CWSMSSEND || myInterface==CWUSERREGISTER || myInterface==CWUSERLOGIN || myInterface==CWPASSWORDDEAL || myInterface==CWUPDATEUSERINFO || myInterface==CWADDUPDATEDRIVER || myInterface==CWQUERYDRIVER || myInterface==CWDELETEDRIVER || myInterface == CWAPPLYLOAN || myInterface==CWQUERYLOANINFO ||myInterface==CWDELETELOANINFO ||myInterface ==CWUPLOADRELATIVE) {
            [CWSS.ssHUD setLabelText:@"加载中"];
            [CWSS.ssHUD show:YES];
        }
     
             if (YES) {//post
            NSLog(@"post");
            [client postPath:[NSString stringWithFormat:@"TaxiLoanGate/LoanCtrlServlet?action=%@%@",[interTemp objectAtIndex:myInterface],strUrl] parameters:value success:^(AFHTTPRequestOperation *operation,id responseObject){
                    [CWSS.ssHUD hide:YES];
                NSLog(@"url---%@",[[operation request] URL]);
                if (dataBlock) {
                    id tempData=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
                    if ([[tempData objectForKey:@"success"] isEqualToString:@"0000"]) {
                        dataBlock(tempData);
                        
                    }else{
    //                   dataBlock(tempData);
                        if (myInterface==CWUSERLOGIN  || myInterface==CWUSERREGISTER ||myInterface==CWPASSWORDDEAL || myInterface==CWAPPLYLOAN || myInterface==CWDELETELOANINFO || myInterface==CWADDUPDATEDRIVER ||myInterface==CWDELETEDRIVER){
                            [cwutil myAlertView:[tempData objectForKey:@"respinfo"]];
                           
                        }else{
                            NSLog(@"%d--%@",myInterface,[[operation request] URL]);
                        }
                    }
                    
                }
                [CWSS.ssHUD hide:YES];
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                [CWSS.ssHUD hide:YES];
                if (errorBlock) {
                    errorBlock(error);
                }else{
                    NSLog(@"%d--%@--%@",myInterface,[[operation request] URL],error);
                }
            }];
        }else{//get
            [client getPath:[NSString stringWithFormat:@"TaxiLoanGate/LoanCtrlServlet?action=%@%@",[interTemp objectAtIndex:myInterface],strUrl] parameters:value success:^(AFHTTPRequestOperation *operation, id responseObject) {
                [CWSS.ssHUD hide:YES];
                if (dataBlock) {
                    dataBlock([NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]);
                }
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                [CWSS.ssHUD hide:YES];
                if (errorBlock) {
                    errorBlock(error);
                }else{
                    NSLog(@"%d-><-%@--%@",myInterface,[[operation request] URL],error);
                }
            }];
        }
    }
    
    /**
     * 上传图片
     */
    -(void)myUploadFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock{
        NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingFormat:@"RemoteUpload.aspx?vercode=123456&operation=iosupload"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        
        AFHTTPClient *httpClient=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
        NSData *imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5);
        
        NSMutableURLRequest *request=[httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock:^(id <AFMultipartFormData>formData){
            [formData appendPartWithFileData:imageData name:@"avatar" fileName:@"avatar.jpg" mimeType:@"image/jpg"];
        }];
        
        AFHTTPRequestOperation *operation=[[AFHTTPRequestOperation alloc] initWithRequest:request];
        [operation setUploadProgressBlock:^(NSUInteger bytesWrittrn,long long totalBytesWritten,long long totalBytesExpectedToWrite){
            NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
        }];
        [operation start];
    }
    
    /**
     * 上传文件
     * @param flag 是否需要保存数据
     */
    -(void)myUploadFile:(UIImage *)uploadImage withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock withFlag:(BOOL)flag{
        
        NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingString:@""] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        
        [CWSS.ssHUD setLabelText:@"正在上传"];
        [CWSS.ssHUD show:YES];
        AFHTTPClient *httpClient=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
        
        NSMutableURLRequest *request=[httpClient multipartFormRequestWithMethod:@"POST" path:@"/RemoteUpload.ashx?vercode=123456&operation=iosupload&Filename=head.png" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
            NSData *data=UIImageJPEGRepresentation(uploadImage, 0.4);
            NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory=[paths objectAtIndex:0];
            
            ///上传头像
            NSString *savedImagePath=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"temp_head.jpg"]];
            [data writeToFile:savedImagePath atomically:NO];
            
            [formData appendPartWithFileData:data name:@"filename" fileName:savedImagePath mimeType:@"image/jpg"];
            
        }];
        
        AFHTTPRequestOperation *operation=[[AFHTTPRequestOperation alloc] initWithRequest:request];
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation,id responseObject){
            if (finishBlock) {
                finishBlock([[operation userInfo] objectForKey:@"filename"],[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]);
                
    //            if (flag==YES) {
    //                NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingAllowFragments error:nil];
    //                NSLog(@"dic---%@",[dic objectForKey:@"data"]);
    //                if ([[ZKNSUserDefaults initUserDefaults].userDefaults objectForKey:UPLOADIMAGE]) {
    //                    [ZKNSUserDefaults deleteUserDefaultsData:UPLOADIMAGE];
    //                }
    //                //保存头像
    //                [ZKNSUserDefaults createUserDefaultDB:UPLOADIMAGE getArrayData:[dic objectForKey:@"data"]];
    //            }
                NSLog(@"上传成功");
                [CWSS.ssHUD setLabelText:@"上传成功"];
                [CWSS.ssHUD hide:YES afterDelay:2.0f];
            }
        } failure:^(AFHTTPRequestOperation *operation,NSError *error){
            if (errorBlock) {
                errorBlock(error);
                NSLog(@"上传失败");
                [CWSS.ssHUD setLabelText:@"上传失败"];
                [CWSS.ssHUD hide:YES afterDelay:2.0f];
            }
        }];
        [httpClient enqueueHTTPRequestOperation:operation];
    }
    
    /**
     * 上次用于语音文件的上传
     */
    -(void)myUploadFile:(NSString *)theUpFilePath withFileUrl:(NSString *)url withFinish:(getFileBlock)finishBlock withError:(getErrorBlock)errorBlock{
        NSURL *requestUrl=[NSURL URLWithString:[[CWBaseURLString stringByAppendingString:@""] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        AFHTTPClient * client=[[AFHTTPClient alloc] initWithBaseURL:requestUrl];
        NSMutableURLRequest *fileUpRequest=[client multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"ichat.aspx?vercode=123456%@",url] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            NSError *error;
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:theUpFilePath isDirectory:NO] name:@"file" fileName:@"textMusic.mp3" mimeType:@"audio/mp3" error:&error];
            NSLog(@"errorBlock---%@",error);
        }];
        
        AFHTTPRequestOperation *fileUploadOp=[[AFHTTPRequestOperation alloc] initWithRequest:fileUpRequest];
        [fileUploadOp setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"upload finish ---%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error---%@",error);
        }];
        
        [client enqueueHTTPRequestOperation:fileUploadOp];
    }
    
    /**
     *语音文件下载
     * @param url 请求地址
     * @param path 下载文件存放的路径
     */
    -(void)downLoadVoiceUrl:(NSString *)url withDownloadPath:(NSString *)path{
        NSURL *urlString = [NSURL URLWithString:[NSString stringWithFormat:@"%@Download.ashx?vercode=123456%@",CWBaseURLString,url]];
        
        NSLog(@"url---%@",urlString);
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:urlString];
        request.delegate=self;
        //当request完成时,整个文件会被移动到这里
        [request setDownloadDestinationPath:path];
        //这个文件已经被下载了一部分
        //                        [request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@%@",NSTemporaryDirectory(),[[[[[data objectForKey:@"data"] objectForKey:@"MsgList"][i] objectForKey:@"Content"] componentsSeparatedByString:@":"][2] stringByReplacingOccurrencesOfString:@"]" withString:@""]]];
        [request setAllowResumeForFileDownloads:YES];//是否允许断点下载
        [request startSynchronous];
        
        NSLog(@"path---%@",path);
    }
    
    #pragma mark ASIHTTPRequestDelegate
    -(void)requestFailed:(ASIHTTPRequest *)request{
        NSLog(@"下载失败");
    
    }
    -(void)requestFinished:(ASIHTTPRequest *)request{
        NSLog(@"下载成功");
    
    }
    
    
    @end
    

     在pch文件中需要定义常量:

    #define CWBaseURLString @"http://172.16.128.174:8080/"
    //网络单例类的调用
    #define CWSS [CWSingleSample sharedSingleSample:sharedSingleSample.myViewController]
    

                                                                                                  此次修改:2015-3-27    未完待续...

  • 相关阅读:
    聚簇索引和非聚簇索引(通俗易懂 言简意赅)
    Java-线程池专题(什么是线程池,如何使用,为什么要用)
    在Spring Boot中动态实现定时任务配置
    面试被问:如果系统 CPU 突然飙升且 GC 频繁,你该如何排查?
    深入理解volatile
    redis3.0常用命令
    redis3.0配置文件详解
    mysql max_allowed_packet 设置过小导致记录写入失败
    linux 项目部署问题
    python sokct 包详解
  • 原文地址:https://www.cnblogs.com/boyuanmeng/p/4371705.html
Copyright © 2020-2023  润新知