// // Networking.swift // JSJP_Student_sw // // Created by Ning.ge on 2023/5/30. // import Moya import RxSwift import Alamofire typealias CoachNetworking = Networking typealias LoginNetworking = Networking typealias StatisticsNetworking = Networking final class Networking: MoyaProvider { init(plugins: [PluginType] = [LoadingPlugin()]) { //安全证书配置DisabledEvaluator 和 host 不能动 let serverTrustManager = ServerTrustManager(evaluators: ["jsjp-admin1.zzxcx.net": DisabledEvaluator(),"jsjp-admin.zzxcx.net": DisabledEvaluator()]) let sessionManager: Session = { let configuration = URLSessionConfiguration.default configuration.httpAdditionalHeaders = HTTPHeaders.default.dictionary configuration.timeoutIntervalForRequest = kTimeoutIntervalForRequest return Session(configuration: configuration, startRequestsImmediately: false,serverTrustManager: serverTrustManager) }() super.init(endpointClosure:Networking.endpointMapping, session:sessionManager, plugins:plugins) } func request( _ target: Target, _ isCache: Bool = false, file: StaticString = #file, function: StaticString = #function, line: UInt = #line ) -> Single { let requestString = "\(target.method) \(target.path)" return self.rx.request(target) .filterSuccessfulStatusCodes() .do(onSuccess: { (value) in NSLog("do- \(Thread.isMainThread)") let message = "SUCCESS: \(requestString) (\(value.statusCode))" log.debug(message, file: file, function: function, line: line) }, onError: {(error) in NotificationCenter.post(customNotification: .netError) if let response = (error as? MoyaError)?.response { if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) { let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)" log.warning(message, file: file, function: function, line: line) } else if let rawString = String(data: response.data, encoding: .utf8) { let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)" log.warning(message, file: file, function: function, line: line) } else { let message = "FAILURE: \(requestString) (\(response.statusCode))" log.warning(message, file: file, function: function, line: line) } } else { let message = "FAILURE: \(requestString)\n\(error)" log.warning(message, file: file, function: function, line: line) } }, onSubscribed: { let message = "REQUEST: \(requestString)" log.debug(message, file: file, function: function, line: line) }) } private static func endpointMapping(target: Target) -> Endpoint { var param: [String:Any] = [:] switch target.task { case let .requestParameters(parameters, _): param = parameters default:break } var url = "\(target.baseURL)\(target.path)?" if target.method == .get { let s = param.map { (key,value) -> String in return "\(key)=\(value)&" } for p in s { url += p } url.remove(at: String.Index(utf16Offset: url.count - 1, in: url)) log.info("请求链接:\(url) \n 请求方法:\(target.method)") } else { log.info("请求链接:\(url) \n 参数:\(param) \n 请求方法:\(target.method)") } return MoyaProvider.defaultEndpointMapping(for: target) } }