MODynamicBaseUrlAPI.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // MODynamicBaseUrlAPI.m
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2023/10/19.
  6. //
  7. #import "MODynamicBaseUrlAPI.h"
  8. #import "MOAPIUrl.h"
  9. static MODynamicBaseUrlAPI *_sharedClient = nil;
  10. //默认的请求超时时间
  11. const static NSTimeInterval kRequestTimeout = 30.0;
  12. @implementation MODynamicBaseUrlAPI
  13. + (MODynamicBaseUrlAPI *)clientWithBaseUrl:(NSString *)baseUrl
  14. {
  15. if ([baseUrl isEqualToString:@""] ||baseUrl == nil)
  16. {
  17. _sharedClient = [[MODynamicBaseUrlAPI alloc] initWithBaseURL:[NSURL URLWithString:kNetPath_Base]];
  18. }
  19. else
  20. {
  21. _sharedClient = [[MODynamicBaseUrlAPI alloc] initWithBaseURL:[NSURL URLWithString:baseUrl]];
  22. }
  23. return _sharedClient;
  24. }
  25. - (id)initWithBaseURL:(NSURL *)url
  26. {
  27. self = [super initWithBaseURL:url];
  28. if (!self)
  29. {
  30. return nil;
  31. }
  32. self.responseSerializer = [AFJSONResponseSerializer serializer];
  33. self.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html",nil];
  34. self.requestSerializer = [AFJSONRequestSerializer serializer];
  35. self.requestSerializer.timeoutInterval = kRequestTimeout;
  36. //证书校验模式为None
  37. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
  38. securityPolicy.allowInvalidCertificates = YES;
  39. securityPolicy.validatesDomainName = NO;
  40. self.securityPolicy = securityPolicy;
  41. return self;
  42. }
  43. - (NSURLSessionDataTask *)requestJsonDataWithPath:(NSString *)aPath withData:(NSData *)data withType:(NSString *)type withParams:(NSDictionary *)params withMethodType:(int)networkMethodInt withProgressHandler:(void (^)(NSProgress *))progressHandler andBlock:(void (^)(id, NSError *))block
  44. {
  45. self.requestSerializer.timeoutInterval = 600;
  46. NSURLSessionDataTask *task = nil;
  47. switch (networkMethodInt)
  48. {
  49. case Post:
  50. {
  51. //DDLogDebug(@"-----> request chatserver[post] %@\n params:%@\n headers:%@",aPath,params,self.requestSerializer.HTTPRequestHeaders);
  52. task = [self POST:aPath parameters:params headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData)
  53. {
  54. if (data)
  55. {
  56. if ([type hasPrefix:@"image"] || [type hasPrefix:@"f_image"])
  57. {
  58. NSString *hashString = [NSString stringWithFormat:@"%lu",(unsigned long)[data hash]];
  59. NSString *temp = [type stringByReplacingOccurrencesOfString:@"image/" withString:@""];
  60. [formData appendPartWithFileData:data name:@"file" fileName:[NSString stringWithFormat:@"%@",hashString] mimeType:type];
  61. }
  62. }
  63. }
  64. progress:^(NSProgress * _Nonnull uploadProgress)
  65. {
  66. progressHandler?progressHandler(uploadProgress):nil;
  67. }
  68. success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
  69. {
  70. id error = [self handleResponse:responseObject];
  71. if (error)
  72. {
  73. block(nil, error);
  74. }
  75. else
  76. {
  77. block(responseObject, nil);
  78. }
  79. }
  80. failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
  81. {
  82. block(nil, error);
  83. }];
  84. break;
  85. }
  86. case Put:
  87. {
  88. NSString *hashString = [NSString stringWithFormat:@"%lu",(unsigned long)[data hash]];
  89. NSString *temp = [type stringByReplacingOccurrencesOfString:@"image/" withString:@""];
  90. NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  91. AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
  92. NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] multipartFormRequestWithMethod:@"PUT" URLString:aPath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  93. } error:nil];
  94. NSDictionary *headers = @{
  95. @"Content-Type": type
  96. };
  97. [request setAllHTTPHeaderFields:headers];
  98. task = [manager uploadTaskWithRequest:request fromData:data progress:^(NSProgress * _Nonnull uploadProgress) {
  99. progressHandler?progressHandler(uploadProgress):nil;
  100. } completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
  101. if (!error) {
  102. block(responseObject, nil);
  103. } else {
  104. block(nil, error);
  105. }
  106. }];
  107. [task resume];
  108. break;
  109. }
  110. }
  111. return task;
  112. }
  113. #pragma mark -- 错误码处理 --
  114. - (id)handleResponse:(id)responseJSON
  115. {
  116. NSError *error = nil;
  117. if ([responseJSON isKindOfClass:[NSArray class]])
  118. {
  119. return error;
  120. }
  121. //code为非0值时,表示有错
  122. NSNumber *resultCode = [responseJSON valueForKeyPath:@"ErrorCode"];
  123. if (resultCode.intValue!=0)
  124. {
  125. error = [NSError errorWithDomain:kNetPath_Base code:resultCode.intValue userInfo:responseJSON];
  126. return error;
  127. }
  128. return error;
  129. }
  130. @end