Networking.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // Networking.swift
  3. // JSJP_Student_sw
  4. //
  5. // Created by Ning.ge on 2023/5/30.
  6. //
  7. import Moya
  8. import RxSwift
  9. import Alamofire
  10. typealias CoachNetworking = Networking<CoachAPI>
  11. typealias LoginNetworking = Networking<LoginAPI>
  12. final class Networking<Target: TargetType>: MoyaProvider<Target> {
  13. init(plugins: [PluginType] = [LoadingPlugin()]) {
  14. //安全证书配置DisabledEvaluator 和 host 不能动
  15. let serverTrustManager = ServerTrustManager(evaluators: ["jsjp-admin1.zzxcx.net": DisabledEvaluator()])
  16. let sessionManager: Session = {
  17. let configuration = URLSessionConfiguration.default
  18. configuration.httpAdditionalHeaders = HTTPHeaders.default.dictionary
  19. configuration.timeoutIntervalForRequest = kTimeoutIntervalForRequest
  20. return Session(configuration: configuration, startRequestsImmediately: false,serverTrustManager: serverTrustManager)
  21. }()
  22. super.init(endpointClosure:Networking.endpointMapping, session:sessionManager, plugins:plugins)
  23. }
  24. func request(
  25. _ target: Target,
  26. _ isCache: Bool = false,
  27. file: StaticString = #file,
  28. function: StaticString = #function,
  29. line: UInt = #line
  30. ) -> Single<Response> {
  31. let requestString = "\(target.method) \(target.path)"
  32. return self.rx.request(target)
  33. .filterSuccessfulStatusCodes()
  34. .do(onSuccess: { (value) in
  35. NSLog("do- \(Thread.isMainThread)")
  36. let message = "SUCCESS: \(requestString) (\(value.statusCode))"
  37. log.debug(message, file: file, function: function, line: line)
  38. }, onError: {(error) in
  39. NotificationCenter.post(customNotification: .netError)
  40. if let response = (error as? MoyaError)?.response {
  41. if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) {
  42. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)"
  43. log.warning(message, file: file, function: function, line: line)
  44. } else if let rawString = String(data: response.data, encoding: .utf8) {
  45. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)"
  46. log.warning(message, file: file, function: function, line: line)
  47. } else {
  48. let message = "FAILURE: \(requestString) (\(response.statusCode))"
  49. log.warning(message, file: file, function: function, line: line)
  50. }
  51. } else {
  52. let message = "FAILURE: \(requestString)\n\(error)"
  53. log.warning(message, file: file, function: function, line: line)
  54. }
  55. }, onSubscribed: {
  56. let message = "REQUEST: \(requestString)"
  57. log.debug(message, file: file, function: function, line: line)
  58. })
  59. }
  60. private static func endpointMapping<Target: TargetType>(target: Target) -> Endpoint {
  61. var param: [String:Any] = [:]
  62. switch target.task {
  63. case let .requestParameters(parameters, _):
  64. param = parameters
  65. default:break
  66. }
  67. var url = "\(target.baseURL)\(target.path)?"
  68. if target.method == .get {
  69. let s = param.map { (key,value) -> String in
  70. return "\(key)=\(value)&"
  71. }
  72. for p in s {
  73. url += p
  74. }
  75. url.remove(at: String.Index(utf16Offset: url.count - 1, in: url))
  76. log.info("请求链接:\(url) \n 请求方法:\(target.method)")
  77. } else {
  78. log.info("请求链接:\(url) \n 参数:\(param) \n 请求方法:\(target.method)")
  79. }
  80. return MoyaProvider.defaultEndpointMapping(for: target)
  81. }
  82. }