BFNetRequestAdaptor.swift 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. //
  2. // BFNetRequestAdaptor.swift
  3. // BFNetRequestKit
  4. //
  5. // Created by SanW on 2021/7/27.
  6. //
  7. import Alamofire
  8. import UIKit
  9. private var bf_abInfoData: [String: Any] = Dictionary<String, Any>.init() // 实验数据
  10. public class BFNetRequestAdaptor: NSObject {
  11. public typealias completeHander = (_ jsonObject: Any?, _ extData: [String: Any]?, _ error: PQError?, _ duration: TimeInterval?) -> Void
  12. /// get请求
  13. public class func getRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
  14. SWNetRequest.getRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
  15. if jsonObject != nil {
  16. let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
  17. response(paraseData.0, paraseData.1, paraseData.2, duration)
  18. } else {
  19. response(nil, nil, error, duration)
  20. }
  21. }
  22. }
  23. /// post请求
  24. public class func postRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
  25. SWNetRequest.postRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
  26. if jsonObject != nil {
  27. let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
  28. response(paraseData.0, paraseData.1, paraseData.2, duration)
  29. } else {
  30. response(nil, nil, error, duration)
  31. }
  32. }
  33. }
  34. // put请求
  35. public class func putRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
  36. SWNetRequest.putRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
  37. if jsonObject != nil {
  38. let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
  39. response(paraseData.0, paraseData.1, paraseData.2, duration)
  40. } else {
  41. response(nil, nil, error, duration)
  42. }
  43. }
  44. }
  45. /// delete请求
  46. public class func deleteRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
  47. SWNetRequest.deleteRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
  48. if jsonObject != nil {
  49. let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
  50. response(paraseData.0, paraseData.1, paraseData.2, duration)
  51. } else {
  52. response(nil, nil, error, duration)
  53. }
  54. }
  55. }
  56. /// head请求
  57. public class func headRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
  58. SWNetRequest.headRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
  59. if jsonObject != nil {
  60. let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
  61. response(paraseData.0, paraseData.1, paraseData.2, duration)
  62. } else {
  63. response(nil, nil, error, duration)
  64. }
  65. }
  66. }
  67. /// 校验图片是否有效
  68. /// - Parameter url: <#url description#>
  69. /// - Returns: <#description#>
  70. public class func imageValideRequestData(url: String, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) {
  71. if !SWNetRequest.bf_validURL(url: url) {
  72. completionHandler(nil, nil, PQError(msg: "url错误", code: 1001))
  73. return
  74. }
  75. // http://www.mxfjx.com/uploadfiles/2014/4/小鸡%20鸡蛋%20蛋生鸡%20鸡生蛋_conew1.gif
  76. let tempUrl = SWNetRequest.bf_urlEncoded(url: url)
  77. let reqUrl = URL(string: tempUrl)!
  78. var request = URLRequest(url: reqUrl)
  79. request.timeoutInterval = 1 // 设置超时1s
  80. request.httpMethod = "HEAD"
  81. let session = URLSession.shared
  82. let headTask = session.dataTask(with: request) { data, response, error in
  83. completionHandler(data, response, error)
  84. debugPrint("head请求返回 = \(url),code = \((response as? HTTPURLResponse)?.statusCode ?? 0),response = \(String(describing: response))")
  85. }
  86. headTask.resume()
  87. }
  88. /// 处理请求参数
  89. /// - Parameters:
  90. /// - encoding: <#encoding description#>
  91. /// - parames: <#parames description#>
  92. /// - commonParams: <#commonParams description#>
  93. /// - Returns: <#description#>
  94. public class func requestParams(encoding: ParameterEncoding, parames: [String: Any]?, commonParams: [String: Any]?) -> [String: Any]? {
  95. if parames == nil || (parames?.keys.count ?? 0) <= 0 {
  96. return commonParams
  97. }
  98. if commonParams == nil || (commonParams?.keys.count ?? 0) <= 0 {
  99. return nil
  100. }
  101. var requestParams: [String: Any] = Dictionary<String, Any>.init()
  102. var tempCommonParams: [String: Any] = commonParams ?? Dictionary<String, Any>.init()
  103. var tempParames: [String: Any] = parames ?? Dictionary<String, Any>.init()
  104. tempCommonParams["abInfoData"] = bf_dictionaryToJsonString(dic: bf_abInfoData) ?? ""
  105. if encoding is JSONEncoding {
  106. requestParams["baseInfo"] = commonParams
  107. requestParams["params"] = parames
  108. } else {
  109. requestParams = tempCommonParams
  110. tempParames.removeValue(forKey: "abInfoData")
  111. for (key, value) in tempParames.reversed() {
  112. requestParams[key] = value
  113. }
  114. }
  115. return requestParams
  116. }
  117. /// 解析成功数据
  118. /// - Parameter respondDict: <#respondDict description#>
  119. /// - Returns: <#description#>
  120. public class func paraseJsonObject(respondDict: [String: Any]) -> (Any?, [String: Any]?, error: PQError?) {
  121. if respondDict.keys.contains("code") && "\(respondDict["code"] ?? "")" == "0" && respondDict.keys.contains("data") {
  122. let extData = respondDict["extData"] as? [String: Any]
  123. if extData != nil, extData?.keys.contains("abInfoData") ?? false {
  124. bf_parasABinfoData(abInfo: extData?["abInfoData"] as? String)
  125. }
  126. return (respondDict["data"], extData, nil)
  127. } else if (respondDict.keys.contains("msg") && "\(respondDict["msg"] ?? "")".count > 0) || (respondDict.keys.contains("message") && "\(respondDict["message"] ?? "")".count > 0) {
  128. return (respondDict["data"], nil, PQError(msg: "\(respondDict["msg"] ?? "")", code: Int("\(respondDict["code"] ?? "")") ?? 10001))
  129. } else {
  130. return (nil, nil, PQError(msg: "\(respondDict["msg"] ?? "")", code: Int("\(respondDict["code"] ?? "")") ?? 10001))
  131. }
  132. }
  133. /// 解析abInfoData
  134. /// - Parameter abInfo: <#abInfo description#>
  135. /// - Returns: description
  136. private static func bf_parasABinfoData(abInfo: String?) {
  137. if abInfo != nil, (abInfo?.count ?? 0) > 0, abInfo != "{}" {
  138. guard let infoDic = bf_jsonStringToDictionary(abInfo!) else { return }
  139. bf_abInfoData.merge(infoDic, uniquingKeysWith: { (key, _) -> Any in
  140. key
  141. })
  142. }
  143. }
  144. private static func bf_jsonStringToDictionary(_ str: String) -> [String: Any]? {
  145. let data = str.data(using: String.Encoding.utf8)
  146. if data == nil {
  147. return [:]
  148. }
  149. if let dict = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any] {
  150. return dict
  151. }
  152. return [:]
  153. }
  154. private static func bf_dictionaryToJsonString(dic: [String: Any]) -> String? {
  155. if !JSONSerialization.isValidJSONObject(dic) {
  156. return ""
  157. }
  158. guard let data = try? JSONSerialization.data(withJSONObject: dic, options: []) else {
  159. return ""
  160. }
  161. let str = String(data: data, encoding: String.Encoding.utf8)
  162. return str
  163. }
  164. }