Networking.swift 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 HomeNetworking = Networking<HomeAPI>
  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. let message = "SUCCESS: \(requestString) (\(value.statusCode))"
  36. log.debug(message, file: file, function: function, line: line)
  37. }, onError: {(error) in
  38. NotificationCenter.post(customNotification: .netError)
  39. if let response = (error as? MoyaError)?.response {
  40. if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) {
  41. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)"
  42. log.warning(message, file: file, function: function, line: line)
  43. } else if let rawString = String(data: response.data, encoding: .utf8) {
  44. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)"
  45. log.warning(message, file: file, function: function, line: line)
  46. } else {
  47. let message = "FAILURE: \(requestString) (\(response.statusCode))"
  48. log.warning(message, file: file, function: function, line: line)
  49. }
  50. } else {
  51. let message = "FAILURE: \(requestString)\n\(error)"
  52. log.warning(message, file: file, function: function, line: line)
  53. }
  54. }, onSubscribed: {
  55. let message = "REQUEST: \(requestString)"
  56. log.debug(message, file: file, function: function, line: line)
  57. })
  58. }
  59. private static func endpointMapping<Target: TargetType>(target: Target) -> Endpoint {
  60. var param: [String:Any] = [:]
  61. switch target.task {
  62. case let .requestParameters(parameters, _):
  63. param = parameters
  64. default:break
  65. }
  66. var url = "\(target.baseURL)\(target.path)?"
  67. if target.method == .get {
  68. let s = param.map { (key,value) -> String in
  69. return "\(key)=\(value)&"
  70. }
  71. for p in s {
  72. url += p
  73. }
  74. url.remove(at: String.Index(utf16Offset: url.count - 1, in: url))
  75. log.info("请求链接:\(url) \n 请求方法:\(target.method)")
  76. } else {
  77. log.info("请求链接:\(url) \n 参数:\(param) \n 请求方法:\(target.method)")
  78. }
  79. return MoyaProvider.defaultEndpointMapping(for: target)
  80. }
  81. }