|
@@ -0,0 +1,553 @@
|
|
|
|
|
+//
|
|
|
|
|
+// NetworkUtils.m
|
|
|
|
|
+// AntsContract
|
|
|
|
|
+//
|
|
|
|
|
+// Created by Ray on 12/26/16.
|
|
|
|
|
+// Copyright © 2016 United Software Applications, Inc. All rights reserved.
|
|
|
|
|
+//
|
|
|
|
|
+
|
|
|
|
|
+#import "NetworkUtils.h"
|
|
|
|
|
+#import "RAUtils.h"
|
|
|
|
|
+#import "Reachability.h"
|
|
|
|
|
+#import "RANetworkTaskDelegate.h"
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+#define BOUNDARY @"AaB03x"
|
|
|
|
|
+
|
|
|
|
|
+@implementation NetworkUtils
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+//+(NSDictionary*) error_dict:(NSError*)error
|
|
|
|
|
+//{
|
|
|
|
|
+// if(error==nil)
|
|
|
|
|
+// return nil;
|
|
|
|
|
+// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
|
|
|
|
|
+// [ret setValue:[NSString stringWithFormat:@"%d",error.code] forKey:@"error_code"];
|
|
|
|
|
+// [ret setValue:error.domain forKey:@"err_domain"];
|
|
|
|
|
+// [ret setValue:[error localizedDescription] forKey:@"err_message"];
|
|
|
|
|
+// // [ret setObject:error.userInfo forKey:@"user_info"];
|
|
|
|
|
+// return ret;
|
|
|
|
|
+//}
|
|
|
|
|
+
|
|
|
|
|
++(bool) IsNetworkAvailable
|
|
|
|
|
+{
|
|
|
|
|
+
|
|
|
|
|
+ if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&
|
|
|
|
|
+ ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable))
|
|
|
|
|
+ return false;
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
++(NSData*)get_json : (NSString*) url parameters:(NSMutableDictionary *) params file:(NSString*)file_path err_recorder:(NSString* )recorder_url result_handler:(resultBlock)resultBlock decrypt_handler:(decryptBlock)decryptBlock
|
|
|
|
|
+{
|
|
|
|
|
+ int retry = 0;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+repeat:
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+ // return [self fake_json:url];
|
|
|
|
|
+
|
|
|
|
|
+ // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
|
|
|
|
|
+ //分界线的标识符
|
|
|
|
|
+ NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";
|
|
|
|
|
+ //根据url初始化request
|
|
|
|
|
+ NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
|
|
|
|
|
+ cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
|
|
|
|
|
+ timeoutInterval:JSON_TIMEOUT];
|
|
|
|
|
+ //分界线 --AaB03x
|
|
|
|
|
+ NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
|
|
|
|
|
+ //结束符 AaB03x--
|
|
|
|
|
+ NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
|
|
|
|
|
+ //要上传的图片
|
|
|
|
|
+ // UIImage *image=[params objectForKey:@"pic"];
|
|
|
|
|
+ //得到图片的data
|
|
|
|
|
+ NSData* data = [NSData dataWithContentsOfFile:file_path];
|
|
|
|
|
+ //http body的字符串
|
|
|
|
|
+ NSMutableString *body=[[NSMutableString alloc]init];
|
|
|
|
|
+
|
|
|
|
|
+ // NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
|
|
|
|
|
+ // [params setValue:@"handset_login" forKey:@"action"];
|
|
|
|
|
+ // [headers setValue:[NSString stringWithFormat:@"%d",dataLength] forKey:@"Content-Length"];
|
|
|
|
|
+
|
|
|
|
|
+ // [params setValue:appDelegate.sessionid forKey:@"sessionid"];
|
|
|
|
|
+ // [params setValue:password forKey:@"password"];
|
|
|
|
|
+ // [params setValue:[NSString stringWithFormat:@"%d",ver] forKey:@"auth_ver"];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // [headers setValue:headQuerlString forKey:@"param"];
|
|
|
|
|
+
|
|
|
|
|
+ //参数的集合的所有key的集合
|
|
|
|
|
+ NSArray *keys= [params allKeys];
|
|
|
|
|
+ DebugLog(@"================parms==================");
|
|
|
|
|
+ //遍历keys
|
|
|
|
|
+ for(int i=0;i<[keys count];i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ //得到当前key
|
|
|
|
|
+ NSString *key=[keys objectAtIndex:i];
|
|
|
|
|
+ //如果key不是pic,说明value是字符类型,比如name:Boris
|
|
|
|
|
+ if(![key isEqualToString:@"pic"])
|
|
|
|
|
+ {
|
|
|
|
|
+ //添加分界线,换行
|
|
|
|
|
+ [body appendFormat:@"%@\r\n",MPboundary];
|
|
|
|
|
+ //添加字段名称,换2行
|
|
|
|
|
+ [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
|
|
|
|
|
+ //添加字段的值
|
|
|
|
|
+ [body appendFormat:@"%@\r\n",[params objectForKey:key]];
|
|
|
|
|
+ DebugLog(@"parameter: key=%@ value=%@",key,[params objectForKey:key]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ DebugLog(@"================parms==================");
|
|
|
|
|
+ ////添加分界线,换行
|
|
|
|
|
+ [body appendFormat:@"%@\r\n",MPboundary];
|
|
|
|
|
+ //声明pic字段,文件名为boris.png
|
|
|
|
|
+
|
|
|
|
|
+ NSString * file_format=[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"upfile\"; filename=\"%@\"\r\n", [file_path lastPathComponent]];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ [body appendFormat:@"%@", file_format];
|
|
|
|
|
+ //声明上传文件的格式
|
|
|
|
|
+ [body appendFormat:@"Content-Type: application/zip\r\n\r\n"];
|
|
|
|
|
+
|
|
|
|
|
+ //声明结束符:--AaB03x--
|
|
|
|
|
+ NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];
|
|
|
|
|
+ //声明myRequestData,用来放入http body
|
|
|
|
|
+ NSMutableData *myRequestData=[NSMutableData data];
|
|
|
|
|
+ //将body字符串转化为UTF8格式的二进制
|
|
|
|
|
+ [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
|
|
+ //将image的data加入
|
|
|
|
|
+ [myRequestData appendData:data];
|
|
|
|
|
+ //加入结束符--AaB03x--
|
|
|
|
|
+ [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
|
|
+
|
|
|
|
|
+ //设置HTTPHeader中Content-Type的值
|
|
|
|
|
+ NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
|
|
|
|
|
+ //设置HTTPHeader
|
|
|
|
|
+ [request setValue:content forHTTPHeaderField:@"Content-Type"];
|
|
|
|
|
+
|
|
|
|
|
+ [request setValue:@"multipart/form-data" forHTTPHeaderField:@"enctype"];
|
|
|
|
|
+
|
|
|
|
|
+ // 关闭keep alive
|
|
|
|
|
+ [request setValue:@"close" forHTTPHeaderField:@"Connection"];
|
|
|
|
|
+ //设置Content-Length
|
|
|
|
|
+ [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];
|
|
|
|
|
+ //设置http body
|
|
|
|
|
+ [request setHTTPBody:myRequestData];
|
|
|
|
|
+ //http method
|
|
|
|
|
+ [request setHTTPMethod:@"POST"];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSHTTPURLResponse* urlResponse = nil;
|
|
|
|
|
+
|
|
|
|
|
+ NSError *error = nil;
|
|
|
|
|
+ NSLog(@"begin request %@",url);
|
|
|
|
|
+
|
|
|
|
|
+ NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ DebugLog(@"url: %@",url);
|
|
|
|
|
+
|
|
|
|
|
+ DebugLog(@"response: %@",[NSHTTPURLResponse localizedStringForStatusCode:urlResponse.statusCode]);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSLog(@"get response");
|
|
|
|
|
+ if (responseData==nil) {
|
|
|
|
|
+
|
|
|
|
|
+ // DebugLog(@"response error:%@", [error localizedDescription]);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
|
|
|
|
|
+ //#define RESULT_FALSE 0
|
|
|
|
|
+ //#define RESULT_TRUE 2
|
|
|
|
|
+ //#define RESULT_NET_ERROR -3
|
|
|
|
|
+ //#define RESULT_NET_NOTAVAILABLE -4
|
|
|
|
|
+ //#define RESULT_ERROR -5
|
|
|
|
|
+ //#define RESULT_LOCALFILE_ERROR -7
|
|
|
|
|
+ //#define RESULT_USERAUTH_ERROR -9
|
|
|
|
|
+ //#define RESULT_UPDATE_USERAUTH_ERROR -11
|
|
|
|
|
+ //#define RESULT_SESSION_EXPIRED -13
|
|
|
|
|
+ //#define RESULT_VER_LOW
|
|
|
|
|
+
|
|
|
|
|
+ // NSString * moreinfo = error.description ;
|
|
|
|
|
+
|
|
|
|
|
+ NSString* err_msg = [error localizedDescription];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //-----------------retry 3 times for error code -1005------------------------
|
|
|
|
|
+ if(error.code==-1005&&retry<3)
|
|
|
|
|
+ {
|
|
|
|
|
+ retry++;
|
|
|
|
|
+ goto repeat;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ //-----------------end retry 3 times for error code -1005------------------------
|
|
|
|
|
+
|
|
|
|
|
+ NSDictionary* error_json = [RAUtils error_dict:error];
|
|
|
|
|
+ [ret setObject:error_json forKey:@"err_obj"];
|
|
|
|
|
+ NSString* resp_msg= nil;
|
|
|
|
|
+
|
|
|
|
|
+ if(err_msg.length==0)
|
|
|
|
|
+ {
|
|
|
|
|
+ err_msg =[NSHTTPURLResponse localizedStringForStatusCode:urlResponse.statusCode];
|
|
|
|
|
+ resp_msg = err_msg;
|
|
|
|
|
+ }
|
|
|
|
|
+ [ret setValue:[NSString stringWithFormat:@"%d",RESULT_NET_ERROR] forKey:@"result"];
|
|
|
|
|
+ [ret setValue:err_msg forKey:@"err_msg"];
|
|
|
|
|
+ [ret setValue:resp_msg forKey:@"resp_msg"];
|
|
|
|
|
+ [ret setValue:[NSString stringWithFormat:@"%ld",(long)urlResponse.statusCode] forKey:@"resp_code"];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject:ret
|
|
|
|
|
+ options:0
|
|
|
|
|
+ error:nil];
|
|
|
|
|
+ if(![url isEqualToString:recorder_url])
|
|
|
|
|
+ {
|
|
|
|
|
+ [self err_log:[RAUtils base64en:[RAConvertor dict2string:params]] result:[RAUtils base64en:[RAConvertor dict2string:ret]] module:url code:RESULT_NET_ERROR];
|
|
|
|
|
+ }
|
|
|
|
|
+ return jsonData;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ // NSString* err_msg = [error localizedDescription];
|
|
|
|
|
+ NSMutableString *str = [[NSMutableString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
|
|
|
|
|
+
|
|
|
|
|
+ DebugLog(@"data string: %@",str);
|
|
|
|
|
+ NSError *error1 = nil;
|
|
|
|
|
+
|
|
|
|
|
+ NSMutableDictionary* jsobj = [[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error1] mutableCopy];
|
|
|
|
|
+
|
|
|
|
|
+ if(jsobj==nil)// 服务器返回不是json
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+ jsobj=[[NSMutableDictionary alloc] init];
|
|
|
|
|
+ [jsobj setValue:[NSNumber numberWithInt:RESULT_NO_RESPONSE] forKey:@"result"];
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ if([jsobj[@"encrypt"] boolValue]==true)
|
|
|
|
|
+ {
|
|
|
|
|
+ jsobj = decryptBlock(jsobj);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (resultBlock) {
|
|
|
|
|
+ jsobj = resultBlock(jsobj);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ int result=[[jsobj valueForKey:@"result"] intValue];
|
|
|
|
|
+ if(![url isEqualToString:recorder_url]&&/*![url isEqualToString:URL_DOWNLOAD_OFFLINE]&&*/result!=2&&result!=99)
|
|
|
|
|
+ {
|
|
|
|
|
+ [self err_log:[RAUtils base64en:[RAConvertor dict2string:params]] result:[RAUtils base64en:str] module:url code:result];
|
|
|
|
|
+ }
|
|
|
|
|
+ NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsobj
|
|
|
|
|
+ options:0
|
|
|
|
|
+ error:nil];
|
|
|
|
|
+ return jsonData;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ return responseData;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
++(NSDictionary*)err_log:(NSString*) up_params result:(NSString*)result module:(NSString*) module code:(int) code//device:(NSString*) device
|
|
|
|
|
+{
|
|
|
|
|
+ // NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
|
|
|
|
|
+ // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
|
|
|
|
|
+ // if(appDelegate.user!=nil)
|
|
|
|
|
+ // [params setValue:appDelegate.user forKey:@"user"];
|
|
|
|
|
+ //
|
|
|
|
|
+ // [params setValue:up_params forKey:@"upparam"];
|
|
|
|
|
+ //
|
|
|
|
|
+ // [params setValue:[NSNumber numberWithInt:code ] forKey:@"code"];
|
|
|
|
|
+ //
|
|
|
|
|
+ // [params setValue:result forKey:@"result"];
|
|
|
|
|
+ // [params setValue:module forKey:@"interfac"];
|
|
|
|
|
+ //
|
|
|
|
|
+ // [params setValue:[RAUtils base64en:[RAUtils dict2string: [RAUtils device_info]]] forKey:@"device"];
|
|
|
|
|
+ //
|
|
|
|
|
+ //
|
|
|
|
|
+ // // [params setValue:module forKey:@"module"];
|
|
|
|
|
+ //
|
|
|
|
|
+ // // [[UIDevice currentDevice] name];
|
|
|
|
|
+ //
|
|
|
|
|
+ // // if(appDelegate.offline_mode)
|
|
|
|
|
+ // // {
|
|
|
|
|
+ // // return [OLDataProvider offline_notimpl];
|
|
|
|
|
+ // // }
|
|
|
|
|
+ // if(![self IsNetworkAvailable])
|
|
|
|
|
+ // return [RAUtils error_json:RESULT_NET_NOTAVAILABLE err_msg:nil];
|
|
|
|
|
+ //
|
|
|
|
|
+ // NSData* json=[self get_json:URL_ERR_LOG parameters:params];
|
|
|
|
|
+ // if(json==nil)
|
|
|
|
|
+ // return nil;
|
|
|
|
|
+ // NSError *error=nil;
|
|
|
|
|
+ // NSDictionary *jsobj = [NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingMutableLeaves error:&error];
|
|
|
|
|
+ // return jsobj;
|
|
|
|
|
+ NSMutableDictionary* jsobj = [@{@"result":@"2"} mutableCopy];
|
|
|
|
|
+ return jsobj;
|
|
|
|
|
+}
|
|
|
|
|
++ (NSURLSessionTask *)upload:(NSData *)filedata FileName:(NSString*) filename Params:(NSDictionary *)params ToHost:(NSString *)urlString Result:(resultHandler)r Progress:(progressHandler)p DecryptHandler:(id (^)(NSString *))decrypt {
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// NSString *fileName = [filePath lastPathComponent];
|
|
|
|
|
+
|
|
|
|
|
+ NSMutableData *dataM = [NSMutableData data];
|
|
|
|
|
+
|
|
|
|
|
+ NSMutableString *stringM = [NSMutableString string];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ DebugLog(@"================parms==================");
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ for (NSString *key in params) {
|
|
|
|
|
+
|
|
|
|
|
+ [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
|
|
+ [stringM appendFormat:@"Content-Type: text/plain; charset=UTF-8\r\n"];
|
|
|
|
|
+ [stringM appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
|
|
|
|
|
+ [stringM appendFormat:@"%@\r\n",[params objectForKey:key]];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ DebugLog(@"parameter: key=%@ value=%@",key,[params objectForKey:key]);
|
|
|
|
|
+ }
|
|
|
|
|
+ DebugLog(@"================parms==================");
|
|
|
|
|
+ // Apex Drivers 2018.5.5
|
|
|
|
|
+ if (filedata) {
|
|
|
|
|
+
|
|
|
|
|
+ [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
|
|
+
|
|
|
|
|
+ [stringM appendFormat:@"Content-Disposition: form-data; name=\"upfile\"; filename=%@\r\n",filename];
|
|
|
|
|
+ [stringM appendString:@"Content-Type: application/mac-binary\r\n"];
|
|
|
|
|
+ [stringM appendString:@"\r\n"];
|
|
|
|
|
+
|
|
|
|
|
+ NSData *stringM_data = [stringM dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
|
+ [dataM appendData:stringM_data];
|
|
|
|
|
+
|
|
|
|
|
+ // NSData *file_data = [NSData dataWithContentsOfFile:filePath];
|
|
|
|
|
+ [dataM appendData:filedata];
|
|
|
|
|
+
|
|
|
|
|
+ NSString *end = [NSString stringWithFormat:@"\r\n--%@--",BOUNDARY];
|
|
|
|
|
+ [dataM appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
|
|
+
|
|
|
|
|
+ } else {
|
|
|
|
|
+
|
|
|
|
|
+ NSData *stringM_data = [stringM dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
|
+ [dataM appendData:stringM_data];
|
|
|
|
|
+ NSString *end = [NSString stringWithFormat:@"\r\n--%@--",BOUNDARY];
|
|
|
|
|
+ [dataM appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Data
|
|
|
|
|
+ NSData *data = dataM;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 可变请求
|
|
|
|
|
+ NSURL *url = [NSURL URLWithString:urlString];
|
|
|
|
|
+ NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url
|
|
|
|
|
+ cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:JSON_TIMEOUT];
|
|
|
|
|
+ // line note
|
|
|
|
|
+ requestM.HTTPMethod = @"POST";
|
|
|
|
|
+
|
|
|
|
|
+ // request header
|
|
|
|
|
+ [requestM addValue:@"close" forHTTPHeaderField:@"Connection"];
|
|
|
|
|
+
|
|
|
|
|
+ [requestM addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",BOUNDARY] forHTTPHeaderField:@"Content-Type"];
|
|
|
|
|
+
|
|
|
|
|
+ [requestM addValue:@"multipart/form-data" forHTTPHeaderField:@"enctype"];
|
|
|
|
|
+
|
|
|
|
|
+ [requestM addValue:[NSString stringWithFormat:@"%lu", (unsigned long)[data length]] forHTTPHeaderField:@"Content-Length"];
|
|
|
|
|
+
|
|
|
|
|
+ // request body
|
|
|
|
|
+ requestM.HTTPBody = data;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSURLSession *urlSession = [self standSession];
|
|
|
|
|
+
|
|
|
|
|
+ if (urlSession.delegate) {
|
|
|
|
|
+ if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
|
|
|
|
|
+
|
|
|
|
|
+ RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
|
|
|
|
|
+
|
|
|
|
|
+ if (p) {
|
|
|
|
|
+ delegate.p = p;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (r) {
|
|
|
|
|
+ delegate.r = r;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (decrypt) {
|
|
|
|
|
+ delegate.decryptHandler = decrypt;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ NSURLSessionDataTask *dataTask = [urlSession uploadTaskWithRequest:requestM fromData:data];
|
|
|
|
|
+
|
|
|
|
|
+ [dataTask resume];
|
|
|
|
|
+
|
|
|
|
|
+ return dataTask;
|
|
|
|
|
+}
|
|
|
|
|
++ (NSURLSessionTask *)upload:(NSString *)filePath Params:(NSDictionary *)params ToHost:(NSString *)urlString Result:(resultHandler)r Progress:(progressHandler)p DecryptHandler:(id (^)(NSString *))decrypt {
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSString *fileName = [filePath lastPathComponent];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ NSData *file_data = [NSData dataWithContentsOfFile:filePath];
|
|
|
|
|
+
|
|
|
|
|
+ return [self upload:file_data FileName:fileName Params:params ToHost:urlString Result:r Progress:p DecryptHandler:decrypt];
|
|
|
|
|
+//
|
|
|
|
|
+// NSMutableData *dataM = [NSMutableData data];
|
|
|
|
|
+//
|
|
|
|
|
+// NSMutableString *stringM = [NSMutableString string];
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// DebugLog(@"================parms==================");
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// for (NSString *key in params) {
|
|
|
|
|
+//
|
|
|
|
|
+// [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
|
|
+// [stringM appendFormat:@"Content-Type: text/plain; charset=UTF-8\r\n"];
|
|
|
|
|
+// [stringM appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
|
|
|
|
|
+// [stringM appendFormat:@"%@\r\n",[params objectForKey:key]];
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// DebugLog(@"parameter: key=%@ value=%@",key,[params objectForKey:key]);
|
|
|
|
|
+// }
|
|
|
|
|
+// DebugLog(@"================parms==================");
|
|
|
|
|
+// [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
|
|
+//
|
|
|
|
|
+// [stringM appendFormat:@"Content-Disposition: form-data; name=\"upfile\"; filename=%@\r\n",fileName];
|
|
|
|
|
+// [stringM appendString:@"Content-Type: application/mac-binary\r\n"];
|
|
|
|
|
+// [stringM appendString:@"\r\n"];
|
|
|
|
|
+//
|
|
|
|
|
+// NSData *stringM_data = [stringM dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
|
+// [dataM appendData:stringM_data];
|
|
|
|
|
+//
|
|
|
|
|
+// NSData *file_data = [NSData dataWithContentsOfFile:filePath];
|
|
|
|
|
+// [dataM appendData:file_data];
|
|
|
|
|
+//
|
|
|
|
|
+// NSString *end = [NSString stringWithFormat:@"\r\n--%@--",BOUNDARY];
|
|
|
|
|
+// [dataM appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
|
|
+//
|
|
|
|
|
+// // Data
|
|
|
|
|
+// NSData *data = dataM;
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// // 可变请求
|
|
|
|
|
+// NSURL *url = [NSURL URLWithString:urlString];
|
|
|
|
|
+// NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url
|
|
|
|
|
+// cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:JSON_TIMEOUT];
|
|
|
|
|
+// // line note
|
|
|
|
|
+// requestM.HTTPMethod = @"POST";
|
|
|
|
|
+//
|
|
|
|
|
+// // request header
|
|
|
|
|
+// [requestM addValue:@"close" forHTTPHeaderField:@"Connection"];
|
|
|
|
|
+//
|
|
|
|
|
+// [requestM addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",BOUNDARY] forHTTPHeaderField:@"Content-Type"];
|
|
|
|
|
+//
|
|
|
|
|
+// [requestM addValue:[NSString stringWithFormat:@"%lu", (unsigned long)[data length]] forHTTPHeaderField:@"Content-Length"];
|
|
|
|
|
+//
|
|
|
|
|
+// // request body
|
|
|
|
|
+// requestM.HTTPBody = data;
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+//
|
|
|
|
|
+// NSURLSession *urlSession = [self standSession];
|
|
|
|
|
+//
|
|
|
|
|
+// if (urlSession.delegate) {
|
|
|
|
|
+// if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
|
|
|
|
|
+//
|
|
|
|
|
+// RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
|
|
|
|
|
+//
|
|
|
|
|
+// if (p) {
|
|
|
|
|
+// delegate.p = p;
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// if (r) {
|
|
|
|
|
+// delegate.r = r;
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// if (decrypt) {
|
|
|
|
|
+// delegate.decryptHandler = decrypt;
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// NSURLSessionDataTask *dataTask = [urlSession uploadTaskWithRequest:requestM fromData:data];
|
|
|
|
|
+//
|
|
|
|
|
+// [dataTask resume];
|
|
|
|
|
+//
|
|
|
|
|
+// return dataTask;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
++ (NSURLSession *)standSession {
|
|
|
|
|
+ NSURLSession *session = nil;
|
|
|
|
|
+
|
|
|
|
|
+ RANetworkTaskDelegate *delegate = [RANetworkTaskDelegate sharedInstance];
|
|
|
|
|
+
|
|
|
|
|
+ NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
|
|
|
+ config.timeoutIntervalForRequest = JSON_TIMEOUT;
|
|
|
|
|
+
|
|
|
|
|
+ NSOperationQueue *queue = [[NSOperationQueue alloc] init];
|
|
|
|
|
+
|
|
|
|
|
+ session = [NSURLSession sessionWithConfiguration:config delegate:delegate delegateQueue:queue];
|
|
|
|
|
+
|
|
|
|
|
+ return session;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
++ (NSURLSessionDataTask *)downloadFileOffset:(NSUInteger)offset Param:(NSDictionary *)param from:(NSString *)url method:(NSString *)method toPath:(NSString *)path progressHandler:(progressHandler)progressHandler completionHandler:(resultHandler)result {
|
|
|
|
|
+
|
|
|
|
|
+ NSURLSession *sessoin = [self standSession];
|
|
|
|
|
+
|
|
|
|
|
+ RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)sessoin.delegate;
|
|
|
|
|
+ delegate.downloadTask = YES;
|
|
|
|
|
+ delegate.fileCachePath = path;
|
|
|
|
|
+ if (progressHandler) {
|
|
|
|
|
+ delegate.p = progressHandler;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (result) {
|
|
|
|
|
+ delegate.r = result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
|
|
|
|
|
+
|
|
|
|
|
+ req.HTTPMethod = method;
|
|
|
|
|
+
|
|
|
|
|
+ if (offset > 0) {
|
|
|
|
|
+ [req addValue:[NSString stringWithFormat:@"bytes=%ld-",(unsigned long)offset] forHTTPHeaderField:@"Range"];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 拼接参数
|
|
|
|
|
+ if (param && param.allValues.count > 0) {
|
|
|
|
|
+ __block NSMutableArray *paramArr = [NSMutableArray array];
|
|
|
|
|
+ [param enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
|
|
|
|
|
+ [paramArr addObject:[NSString stringWithFormat:@"%@=%@",key,obj]];
|
|
|
|
|
+ }];
|
|
|
|
|
+ NSString *paramStr = [paramArr componentsJoinedByString:@"&"];
|
|
|
|
|
+
|
|
|
|
|
+ req.HTTPBody = [paramStr dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ NSURLSessionDataTask *downloadTask = [sessoin dataTaskWithRequest:req];
|
|
|
|
|
+
|
|
|
|
|
+ [downloadTask resume];
|
|
|
|
|
+
|
|
|
|
|
+ return downloadTask;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@end
|