| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826 |
- //
- // 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"];
-
- NSLog(@"%@", [[NSString alloc] initWithData:myRequestData encoding:NSUTF8StringEncoding]);
- 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;
-
- // 子类没有处理err_log函数时的默认处理。
- 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;
- }
- + (NSURLSessionDownloadTask *)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];
- }
-
- NSURLSessionDownloadTask *downloadTask = [sessoin downloadTaskWithRequest:req];
-
- [downloadTask resume];
-
- return downloadTask;
-
- }
- #pragma mark new interface
- +(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params
- {
- //
- // NSString *userAction = [params valueForKey:kAction];
- // NSMutableDictionary *extra = [[params valueForKey:kExtra] mutableCopy];
- // if ([userAction isEqualToString:@"Login"]) {
- // if (!extra) {
- // extra = [NSMutableDictionary dictionary];
- // }
- // [extra setObject:[params objectForKey:@"user"] forKey:@"user"];
- // }
-
- return params;
- }
- +(void)request_interface_d : (NSString*) url parameters:(NSMutableDictionary *) params err_record_url:(NSString* )recorder_url completionHandler:(resultHandler)result retry:(int) retry
- {
- // __block int retry = 0;
-
-
-
- if(![NetworkUtils IsNetworkAvailable])
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result([[RAConvertor string2dict:[NSString stringWithFormat:@"{\"result\":%d}",RESULT_NET_NOTAVAILABLE]] mutableCopy]);
- });
- // return detailContent;
- return ;
- }
- params = [self prepare_addtional_params:params];
-
-
- //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:@"%@",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"];
-
-
- NSLog(@"%@", [[NSString alloc] initWithData:myRequestData encoding:NSUTF8StringEncoding]);
-
- NSURLSession *urlSession = [self standSession];
-
- if (urlSession.delegate) {
- if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
-
- RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
-
- // if (p) {
- // delegate.p = p;
- // }
- //
- if (result) {
- delegate.r = result;
- }
- //
- // if (decrypt) {
- // delegate.decryptHandler = decrypt;
- // }
-
- }
- }
- NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:request];
- // [dataTask1 resume];
- // NSURLSessionDataTask *dataTask =[urlSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
- //
- // NSData *responseData =data;
- // NSHTTPURLResponse* urlResponse =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)
- // {
- // int new_retry=retry+1;
- // [self request_interface:url parameters:params err_record_url:recorder_url completionHandler:result retry:new_retry];
- // return;
- // // 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];
- // }
- // dispatch_async(dispatch_get_main_queue(), ^{
- // if(result)
- // return result([[RAConvertor data2dict:jsonData] mutableCopy]);
- // });
- // }
- // else
- // {
- // NSDictionary* dict =[RAConvertor data2dict:responseData];
- // dispatch_async(dispatch_get_main_queue(), ^{
- // if(result)
- // return result([[RAConvertor data2dict:responseData] mutableCopy]);
- // });
- //
- // }
- //
- // }];
- //// NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:request ];
- //
- [dataTask resume];
-
- return ;
-
-
-
-
- //
- //
- // 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;
- // }
- }
- +(void)request_interface : (NSString*) url parameters:(NSMutableDictionary *) params err_record_url:(NSString* )recorder_url completionHandler:(resultHandler)result retry:(int) retry
- {
- // __block int retry = 0;
-
-
-
- if(![NetworkUtils IsNetworkAvailable])
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result([[RAConvertor string2dict:[NSString stringWithFormat:@"{\"result\":%d,\"err_msg\":\"%@\"}",RESULT_NET_NOTAVAILABLE,NSLocalizedString(@"net_not_available", nil)]] mutableCopy]);
- });
- // return detailContent;
- return ;
- }
- params = [self prepare_addtional_params:params];
-
-
- //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:@"%@",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"];
-
-
-
-
- NSURLSession *urlSession = [self standSession];
-
- if (urlSession.delegate) {
- if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
-
- RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
-
- // if (p) {
- // delegate.p = p;
- // }
- //
- if (result) {
- delegate.r = result;
- }
- //
- // if (decrypt) {
- // delegate.decryptHandler = decrypt;
- // }
-
- }
- }
- NSURLSessionDataTask *dataTask =[urlSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
-
- NSData *responseData =data;
- NSHTTPURLResponse* urlResponse =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)
- {
- int new_retry=retry+1;
- [self request_interface:url parameters:params err_record_url:recorder_url completionHandler:result retry:new_retry];
- return;
- // 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];
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- return result([[RAConvertor data2dict:jsonData] mutableCopy]);
- });
- }
- else
- {
- NSMutableDictionary* dict =[[RAConvertor data2dict:responseData] mutableCopy];
- if([dict[@"result"] intValue]==RESULT_USERAUTH_ERROR)
- {
- dict[@"err_msg"]=@"Authorization failed.";
- }
- // if([dict[@"result"] intValue]==RESULT_ERROR)
- // {
- //// RESULT_ERROR
- // }
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- return result(dict);
- });
-
- }
-
- }];
- // NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:request ];
-
- [dataTask resume];
-
- return ;
-
-
-
-
- //
- //
- // 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;
- // }
- }
- +(void)request_file_1 : (NSString*) url parameters:(NSMutableDictionary *) params err_record_url:(NSString* )recorder_url completionHandler:(resultHandler)result
- /* dataHandler:(dataHandler)returndata*/
- {
- // __block int retry = 0;
-
-
-
- if(![NetworkUtils IsNetworkAvailable])
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result([[RAConvertor string2dict:[NSString stringWithFormat:@"{'result':%d}",RESULT_NET_NOTAVAILABLE]] mutableCopy]);
- });
- // return detailContent;
- return ;
- }
- params = [self prepare_addtional_params:params];
-
-
- //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:@"%@",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"];
-
-
-
-
- NSURLSession *urlSession = [self standSession];
-
- if (urlSession.delegate) {
- if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
-
- RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
-
- // if (p) {
- // delegate.p = p;
- // }
- //
- if (result) {
- delegate.r = result;
- }
- //
- // if (decrypt) {
- // delegate.decryptHandler = decrypt;
- // }
-
- }
- }
-
- NSURLSessionDownloadTask* downloadTask=[urlSession downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
-
- NSHTTPURLResponse* urlResponse =response;
- NSData* data =[NSData dataWithContentsOfURL:location] ;
- NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
- if(data==nil)
- {
- NSString* err_msg = [error localizedDescription];
- 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"];
-
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result(ret);
- });
- }
- else
- {
-
- NSString *cacheDir = NSTemporaryDirectory();
-
- if (![[NSFileManager defaultManager] fileExistsAtPath:cacheDir]) {
- [[NSFileManager defaultManager] createDirectoryAtPath:cacheDir withIntermediateDirectories:NO attributes:nil error:nil];
- }
-
- ret[@"result"]=@"2";
- ret[@"data"]=data;
- ret[@"path"]=[location absoluteString];
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result(ret);
- });
- }
- // if(returndata)
- // {
- // returndata(data);
- // }
- }];
-
- [downloadTask resume];
-
- return ;
- //
- // NSURLSessionDataTask *dataTask =[urlSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
- //
- // NSData *responseData =data;
- // NSHTTPURLResponse* urlResponse =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)
- // {
- // int new_retry=retry+1;
- // [self request_interface:url parameters:params err_record_url:recorder_url completionHandler:result retry:new_retry];
- // return;
- // // 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];
- // }
- //
- // if(result)
- // return result([[RAConvertor data2dict:jsonData] mutableCopy]);
- //
- // }
- // else
- // {
- // NSDictionary* dict =[RAConvertor data2dict:responseData];
- // dispatch_async(dispatch_get_main_queue(), ^{
- // if(result)
- // return result([[RAConvertor data2dict:responseData] mutableCopy]);
- // });
- //
- // }
- //
- // }];
- //// NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest:request ];
- //
- // [dataTask resume];
- //
- // return nil;
-
-
-
-
- //
- //
- // 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;
- // }
- }
- +(void)request_file_fast : (NSString*) url parameters:(NSMutableDictionary *) params completionHandler:(resultHandler)result
- // Param:(NSDictionary *)param from:(NSString *)url completionHandler:(resultHandler)result
- /* dataHandler:(dataHandler)returndata*/
- {
- if(![NetworkUtils IsNetworkAvailable])
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result([[RAConvertor string2dict:[NSString stringWithFormat:@"{\"result\":%d,\"err_msg\":\"%@\"}",RESULT_NET_NOTAVAILABLE,NSLocalizedString(@"net_not_available", nil)]] mutableCopy]);
- });
- // return detailContent;
- return ;
- }
- params = [self prepare_addtional_params:params];
- NSURLSession *urlSession = [self standSession];
-
- // RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
- // delegate.downloadTask = YES;
- // delegate.fileCachePath = path;
- // if (progressHandler) {
- // delegate.p = progressHandler;
- // }
- //
- // if (result) {
- // delegate.r = result;
- // }
-
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
-
-
-
- request.HTTPMethod = @"Post";
- //
- // if (offset > 0) {
- // [request addValue:[NSString stringWithFormat:@"bytes=%ld-",(unsigned long)offset] forHTTPHeaderField:@"Range"];
- // }
-
- // 拼接参数
- if (params && params.allValues.count > 0) {
- __block NSMutableArray *paramArr = [NSMutableArray array];
- [params enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
- [paramArr addObject:[NSString stringWithFormat:@"%@=%@",key,obj]];
- }];
- NSString *paramStr = [paramArr componentsJoinedByString:@"&"];
-
- request.HTTPBody = [paramStr dataUsingEncoding:NSUTF8StringEncoding];
- }
-
- NSURLSessionDownloadTask* downloadTask=[urlSession downloadTaskWithRequest:request completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
-
-
-
-
-
- NSHTTPURLResponse* urlResponse =response;
- NSData* data =[NSData dataWithContentsOfURL:location] ;
- NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
- if(data==nil)
- {
- NSString* err_msg = [error localizedDescription];
- 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"];
-
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result(ret);
- });
- }
- else
- {
-
-
- NSString* path=NSTemporaryDirectory();
-
- if (response.suggestedFilename) {
- path = [path stringByAppendingPathComponent:response.suggestedFilename];
- } else {
- path = [path stringByAppendingPathComponent:[NSUUID UUID].UUIDString];
- }
- NSError *error = nil;
-
- [[NSFileManager defaultManager] copyItemAtPath:location.path toPath:path error:&error];
-
- // [[NSFileManager defaultManager] copyItemAtURL:[NSURL URLWithString:location.path] toURL:[NSURL URLWithString:path] error:&error];
- // NSFileManager
- // NSString *cacheDir = NSTemporaryDirectory();
- //
- // if (![[NSFileManager defaultManager] fileExistsAtPath:cacheDir]) {
- // [[NSFileManager defaultManager] createDirectoryAtPath:cacheDir withIntermediateDirectories:NO attributes:nil error:nil];
- // }
-
- ret[@"result"]=@"2";
- ret[@"data"]=data;
- ret[@"path"]=path;//[location absoluteString];
- dispatch_async(dispatch_get_main_queue(), ^{
- if(result)
- result(ret);
- });
- }
- // if(returndata)
- // {
- // returndata(data);
- // }
- }];
-
- [downloadTask resume];
-
- return ;
- }
- @end
|