netWorkManager.m 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. //
  2. // netWorkManager.m
  3. // 隐私保护
  4. //
  5. // Created by xd h on 2023/10/8.
  6. //
  7. #import "netWorkManager.h"
  8. #import "AFNetworkReachabilityManager.h"
  9. #import "AFHTTPSessionManager.h"
  10. @interface netWorkManager ()
  11. {
  12. AFHTTPSessionManager *manager;
  13. NSString *mCloudService;
  14. //NSString *mRequstAPI;
  15. AFHTTPSessionManager *managerNAS;
  16. }
  17. @end
  18. @implementation netWorkManager
  19. static netWorkManager *Game_NetWorkShareInstance = nil;
  20. +(netWorkManager *)shareInstance;
  21. {
  22. static dispatch_once_t onceToken;
  23. dispatch_once(&onceToken, ^{
  24. Game_NetWorkShareInstance = [[netWorkManager alloc]init];
  25. });
  26. return Game_NetWorkShareInstance;
  27. }
  28. - (id)init
  29. {
  30. self = [super init];
  31. if (self) {
  32. [self initManager];
  33. }
  34. return self;
  35. }
  36. - (void)initManager
  37. {
  38. mCloudService = CloudService;
  39. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  40. {
  41. manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:mCloudService]];
  42. }
  43. else
  44. {
  45. manager = [AFHTTPSessionManager manager];
  46. }
  47. manager.requestSerializer = [AFJSONRequestSerializer serializer];
  48. manager.responseSerializer = [AFJSONResponseSerializer serializer];
  49. [manager.requestSerializer setHTTPShouldHandleCookies:NO];
  50. [manager.requestSerializer setHTTPShouldUsePipelining:NO];
  51. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain",@"application/xml",@"image/png", @"audio/aac", @"text/x-vcard",nil];
  52. manager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
  53. //设置当前语言
  54. NSString * preferredLanguage = @"zh";
  55. //NSArray *arLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
  56. //NSLog(@"arLanguages:%@",arLanguages);
  57. ///获取设备当前地区的代码和APP语言环境
  58. NSString *languageCode = [NSLocale preferredLanguages][0];
  59. //目前支持 中文(简体 繁体) 英文 日语
  60. if([languageCode rangeOfString:@"zh-Hans"].location != NSNotFound)
  61. {
  62. preferredLanguage = @"zh";
  63. }
  64. else if([languageCode rangeOfString:@"zh-Hant"].location != NSNotFound)
  65. {
  66. preferredLanguage = @"zh-TW";
  67. }
  68. else if([languageCode rangeOfString:@"ja-"].location != NSNotFound)
  69. {
  70. preferredLanguage = @"ja";
  71. }
  72. else{
  73. preferredLanguage = @"en";
  74. }
  75. [manager.requestSerializer setValue:preferredLanguage forHTTPHeaderField:@"Accept-Language"];
  76. // 请求头里添加版本号
  77. //[manager.requestSerializer setValue:@"1.0" forHTTPHeaderField:@"rc-sdk"];
  78. //[manager.requestSerializer setValue:@"1" forHTTPHeaderField:@"rc-platform"]; //iOS 1 安卓0
  79. // NSString *version = [NSString stringWithFormat:@"v%@", [IPhoneInfoAndToolsManager appVersion]];
  80. // NSString *uuid = [IPhoneInfoAndToolsManager phoneDeviceUuid];
  81. // [manager.requestSerializer setValue:version forHTTPHeaderField:@"versionName"];
  82. // [manager.requestSerializer setValue:uuid forHTTPHeaderField:@"devicesId"];
  83. // [manager.requestSerializer setValue:@"4" forHTTPHeaderField:@"client"];
  84. if ([mCloudService rangeOfString:@"https"].location != NSNotFound)
  85. {
  86. [manager setSecurityPolicy:[self customSecurityPolicy]];
  87. }
  88. // 客户端是否信任非法证书
  89. // manager.securityPolicy.allowInvalidCertificates = YES;
  90. // // 是否在证书域字段中验证域名
  91. // [manager.securityPolicy setValidatesDomainName:NO];
  92. manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  93. // manager.securityPolicy.allowInvalidCertificates = YES; //还是必须设成YES
  94. // 设置超时时间(设置有效)
  95. //[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
  96. manager.requestSerializer.timeoutInterval = 30;
  97. //[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
  98. }
  99. - (void)setAFHTTPSessionManagerFunBy:(NSInteger)tcpPort
  100. {
  101. NSString *ip = @"127.0.0.1";
  102. NSNumber *proxyPort = [NSNumber numberWithInteger:tcpPort];
  103. NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
  104. config.connectionProxyDictionary = @
  105. {
  106. @"HTTPEnable":@YES,
  107. @"HTTPProxy" : ip,
  108. @"HTTPPort" : proxyPort,
  109. @"HTTPSEnable":@YES,
  110. @"HTTPSProxy": ip,
  111. @"HTTPSPort": proxyPort
  112. };
  113. managerNAS = [[AFHTTPSessionManager alloc] initWithBaseURL:nil sessionConfiguration:config];
  114. managerNAS.requestSerializer = [AFJSONRequestSerializer serializer];
  115. managerNAS.responseSerializer = [AFJSONResponseSerializer serializer];
  116. [managerNAS.requestSerializer setHTTPShouldHandleCookies:NO];
  117. [managerNAS.requestSerializer setHTTPShouldUsePipelining:NO];
  118. managerNAS.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain",@"application/xml",@"image/png", @"audio/aac", @"text/x-vcard",nil];
  119. managerNAS.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];
  120. //if ([NASService rangeOfString:@"https"].location != NSNotFound)
  121. if ([ksharedAppDelegate.NASFileByBoxService rangeOfString:@"https"].location != NSNotFound)
  122. {
  123. [managerNAS setSecurityPolicy:[self customSecurityPolicy]];
  124. }
  125. }
  126. #pragma - mark 证书相关
  127. - (AFSecurityPolicy*)customSecurityPolicy
  128. {
  129. // // /先导入证书
  130. // NSString *cerName = @"newrelease";
  131. // if ([@"https://client.phone.androidscloud.com" isEqualToString:CloudService])
  132. // {
  133. // cerName = @"newrelease";
  134. // }
  135. // else if ([@"https://prese.phone.androidscloud.com" isEqualToString:CloudService])
  136. // {
  137. // cerName = @"newrelease";
  138. // }
  139. // NSString *cerPath = [[NSBundle mainBundle] pathForResource:cerName ofType:@"cer"];//证书的路径
  140. // NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  141. // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning
  142. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  143. // if ([@"https://test.androidscloud.com" isEqualToString:CloudService])
  144. // {
  145. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  146. // }
  147. // else if ([@"https://pre.androidscloud.com" isEqualToString:CloudService])
  148. // {
  149. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  150. // }
  151. // else if ([@"https://a.androidscloud.com" isEqualToString:CloudService])
  152. // {
  153. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  154. // }
  155. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  156. // 如果是需要验证自建证书,需要设置为YES
  157. securityPolicy.allowInvalidCertificates = NO;
  158. //validatesDomainName 是否需要验证域名,默认为YES;
  159. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  160. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  161. //如置为NO,建议自己添加对应域名的校验逻辑。
  162. securityPolicy.validatesDomainName = YES;
  163. // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil];
  164. return securityPolicy;
  165. }
  166. #pragma - mark 证书相关
  167. //- (AFSecurityPolicy*)customSecurityPolicy
  168. //{
  169. // // /先导入证书
  170. // NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"];//证书的路径
  171. //
  172. // if ([@"https://client.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService])
  173. // {
  174. // cerPath = [[NSBundle mainBundle] pathForResource:@"release" ofType:@"cer"];//证书的路径
  175. // }
  176. //
  177. //
  178. // NSData *certData = [NSData dataWithContentsOfFile:cerPath];
  179. //
  180. // // AFSSLPinningModeCertificate 使用证书验证模式、、、//AFSSLPinningModeNone 不使用SSLPinning //AFSSLPinningModeCertificate 使用SSLPinning
  181. // AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  182. //
  183. // if ([@"https://test.androidscloud.com" isEqualToString:RC_Game_SDK_CloudService])
  184. // {
  185. // securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  186. // }
  187. //
  188. //
  189. // // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  190. // // 如果是需要验证自建证书,需要设置为YES
  191. // securityPolicy.allowInvalidCertificates = YES;
  192. //
  193. // //validatesDomainName 是否需要验证域名,默认为YES;
  194. // //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  195. // //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  196. // //如置为NO,建议自己添加对应域名的校验逻辑。
  197. // securityPolicy.validatesDomainName = NO;
  198. //
  199. // securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:certData, nil];
  200. //
  201. // return securityPolicy;
  202. //}
  203. #pragma mark afnetwork post 请求
  204. - (void)CommonPostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  205. {
  206. NSString *curServer = mCloudService;
  207. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",curServer,code,dict);
  208. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  209. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  210. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  211. {// 无网络状态
  212. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  213. mainBlock(^{
  214. success(responseObject);
  215. });
  216. return;
  217. }
  218. [manager POST:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  219. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  220. success(responseObject);
  221. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  222. failure(error);
  223. HLog(@"%@", error);
  224. }];
  225. }
  226. #pragma mark afnetwork get 请求
  227. - (void)CommonGetWithCallBackCode:(NSString *)code Parameters:(NSDictionary *_Nullable)dic success:(netWork_Success)success failure:(netWork_Faild)faildStr
  228. {
  229. NSString *curServer = mCloudService;
  230. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  231. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  232. {// 无网络状态
  233. NSDictionary *responseObject = @{@"status" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  234. success(responseObject);
  235. return;
  236. }
  237. HLog(@"地址:%@%@,\n 参数:%@\n",curServer,code,dic);
  238. [manager GET:url parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  239. HLog(@"接口名称:%@,返回:%@,\n ",code,responseObject);
  240. success(responseObject);
  241. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  242. faildStr(error);
  243. HLog(@"%@", error);
  244. }];
  245. }
  246. - (void)doUploadFileToFileServiceWithParams:(NSMutableDictionary *)params data:(NSData *)data success:(netWork_Success)success faild:(netWork_Faild)faildStr {
  247. AFHTTPSessionManager *uploadManager = [[AFHTTPSessionManager alloc] init];
  248. uploadManager.requestSerializer = [AFJSONRequestSerializer serializer];
  249. uploadManager.responseSerializer = [AFJSONResponseSerializer serializer];
  250. uploadManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/javascript",@"text/html",@"text/plain",nil];
  251. uploadManager.requestSerializer.timeoutInterval = 60;
  252. NSString *urlString = FileService;
  253. [uploadManager.requestSerializer setValue:Const_File_Access_Key forHTTPHeaderField:@"file-access-key"];
  254. [uploadManager POST:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  255. NSString *mimeType =@"application/octet-stream";
  256. [formData appendPartWithFileData:data name:@"file" fileName:params[@"filename"] mimeType:mimeType];
  257. } progress:^(NSProgress * _Nonnull uploadProgress) {
  258. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  259. success(responseObject);
  260. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  261. faildStr(error);
  262. }];
  263. }
  264. #pragma mark afnetwork post 请求
  265. - (void)cloudPhonePostCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  266. {
  267. //NSString *curServer = NASService;
  268. NSString *curServer = ksharedAppDelegate.NASFileByBoxService;
  269. if(!curServer ||curServer.length ==0){
  270. NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""};
  271. mainBlock(^{
  272. success(responseObject);
  273. });
  274. return;
  275. }
  276. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  277. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
  278. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  279. if([code isEqualToString:@"delFile"])
  280. {
  281. [manager.requestSerializer setValue:@"multipart/from-data" forHTTPHeaderField:@"Content-Type"];
  282. }
  283. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  284. {// 无网络状态
  285. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  286. mainBlock(^{
  287. success(responseObject);
  288. });
  289. return;
  290. }
  291. NSMutableURLRequest *request = [manager.requestSerializer multipartFormRequestWithMethod:@"POST"
  292. URLString:url
  293. parameters:nil
  294. constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  295. for (NSString *key in [dict allKeys])
  296. {
  297. NSArray *arr = dict[key];
  298. NSString *str1 = @"[";
  299. NSString *str2 = @"]";
  300. NSMutableString *dataStr = [NSMutableString new];
  301. for (NSString *curStr in arr) {
  302. if(dataStr.length != 0){
  303. [dataStr appendString:@","];
  304. }
  305. [dataStr appendString:@"\""];
  306. [dataStr appendString:curStr];
  307. [dataStr appendString:@"\""];
  308. }
  309. NSMutableString *totalStr = [NSMutableString new];
  310. [totalStr appendString:str1];
  311. [totalStr appendString:dataStr];
  312. [totalStr appendString:str2];
  313. HLog(@"%@",totalStr);
  314. [formData appendPartWithFormData:[totalStr dataUsingEncoding:NSUTF8StringEncoding] name:key];
  315. }
  316. } error:nil];
  317. NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
  318. if (error) {
  319. HLog(@"%@", error);
  320. failure(error);
  321. return;
  322. }
  323. success(responseObject);
  324. }];
  325. [task resume];
  326. }
  327. - (void)cloudPhoneGETCallBackCode:(NSString*)code Parameters:(NSDictionary*)dict success:(netWork_Success)success failure:(netWork_Faild)failure
  328. {
  329. //NSString *curServer = NASService;
  330. NSString *curServer = ksharedAppDelegate.NASFileByBoxService;
  331. if(!curServer ||curServer.length ==0){
  332. NSDictionary *responseObject = @{@"code" : @(-998), @"msg" : @"ip wrong", @"data" : @""};
  333. mainBlock(^{
  334. success(responseObject);
  335. });
  336. return;
  337. }
  338. NSString *url = [NSString stringWithFormat:@"%@%@",curServer,code];
  339. HLog(@"地址:%@ \n接口名称:%@,\n 参数:%@\n",url,code,dict);
  340. //managerNAS manager
  341. [managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  342. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  343. {// 无网络状态
  344. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  345. mainBlock(^{
  346. success(responseObject);
  347. });
  348. return;
  349. }
  350. //managerNAS manager
  351. [manager GET:url parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  352. HLog(@"接口名称:%@ 接口返回:%@,\n ",code,responseObject);
  353. success(responseObject);
  354. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error, id _Nonnull responseObject) {
  355. failure(error);
  356. HLog(@"%@", error);
  357. }];
  358. }
  359. #pragma mark afnetwork get 请求 检测文件是否存在
  360. - (void)cloudPhoneCheckUrlCallBackCode:(NSString*)code success:(netWork_Success)success failure:(netWork_Faild)failure
  361. {
  362. NSString *curServer = code;
  363. NSString *url = [NSString stringWithFormat:@"%@",curServer];
  364. HLog(@"地址:%@",url);
  365. //managerNAS manager
  366. //[managerNAS.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  367. if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
  368. {// 无网络状态
  369. NSDictionary *responseObject = @{@"code" : @(-999), @"msg" : @"当前网络不可用", @"data" : @""};
  370. mainBlock(^{
  371. success(responseObject);
  372. });
  373. return;
  374. }
  375. NSString *fullUrl = nil;
  376. NSString *paraStr = nil;
  377. NSArray *urlArr = [url componentsSeparatedByString:@"?"];
  378. if(urlArr.count == 2){
  379. fullUrl = urlArr.firstObject;
  380. paraStr = urlArr.lastObject;
  381. paraStr = [paraStr stringByReplacingOccurrencesOfString:@"path=" withString:@""];
  382. NSString *string = paraStr;
  383. NSString *filePathBase64 = [iTools base64UrlEncoder:string];
  384. fullUrl = [[NSString alloc] initWithFormat:@"%@/%@",fullUrl,filePathBase64];
  385. }else{
  386. return;
  387. }
  388. if(!fullUrl){
  389. return;
  390. }
  391. if([fullUrl containsString:@"getFile"]
  392. &&![fullUrl containsString:@"getFiles"]){
  393. fullUrl = [fullUrl stringByReplacingOccurrencesOfString:@"getFile" withString:@"getFiles"];
  394. }
  395. HLog(@"%@",fullUrl);
  396. //1.创建管理者对象
  397. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  398. //2.确定请求的URL地址
  399. NSURL *url2222 = [NSURL URLWithString:fullUrl];
  400. //3.创建请求对象
  401. NSURLRequest *request = [NSURLRequest requestWithURL:url2222];
  402. //4.下载任务
  403. __block SuperModel *model = [SuperModel new];
  404. __block NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
  405. //打印下下载进度
  406. HLog(@"%@",downloadProgress);
  407. [task cancel];
  408. } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
  409. //设置文件保存路径
  410. return [NSURL fileURLWithPath:@""];
  411. } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
  412. //HLog(@"完成cache:%@",filePath);
  413. NSHTTPURLResponse *response1 = (NSHTTPURLResponse *)response;
  414. NSInteger statusCode = [response1 statusCode];
  415. HLog(@"statusCode:%ld",statusCode);
  416. if (statusCode == 200) {
  417. model.code = 0;
  418. success(model);
  419. }else{
  420. model.code = -1;
  421. success(model);
  422. }
  423. }];
  424. //5.开始启动下载任务
  425. [task resume];
  426. //[task cancel];
  427. }
  428. @end