123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //
- // BFNetRequestAdaptor.swift
- // BFNetRequestKit
- //
- // Created by SanW on 2021/7/27.
- //
- import Alamofire
- import UIKit
- private var bf_abInfoData: [String: Any] = Dictionary<String, Any>.init() // 实验数据
- public class BFNetRequestAdaptor: NSObject {
- public typealias completeHander = (_ jsonObject: Any?, _ extData: [String: Any]?, _ error: PQError?, _ duration: TimeInterval?) -> Void
- /// get请求
- public class func getRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
- SWNetRequest.getRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
- if jsonObject != nil {
- let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
- response(paraseData.0, paraseData.1, paraseData.2, duration)
- } else {
- response(nil, nil, error, duration)
- }
- }
- }
- /// post请求
- public class func postRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
- SWNetRequest.postRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
- if jsonObject != nil {
- let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
- response(paraseData.0, paraseData.1, paraseData.2, duration)
- } else {
- response(nil, nil, error, duration)
- }
- }
- }
- // put请求
- public class func putRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
- SWNetRequest.putRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
- if jsonObject != nil {
- let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
- response(paraseData.0, paraseData.1, paraseData.2, duration)
- } else {
- response(nil, nil, error, duration)
- }
- }
- }
- /// delete请求
- public class func deleteRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
- SWNetRequest.deleteRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
- if jsonObject != nil {
- let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
- response(paraseData.0, paraseData.1, paraseData.2, duration)
- } else {
- response(nil, nil, error, duration)
- }
- }
- }
- /// head请求
- public class func headRequestData(url: String, parames: [String: Any]?, commonParams: [String: Any]? = nil, encoding: ParameterEncoding = URLEncoding.default, timeoutInterval: TimeInterval = 60, response: @escaping completeHander) {
- SWNetRequest.headRequestData(url: url, parames: requestParams(encoding: encoding, parames: parames, commonParams: commonParams), encoding: encoding, timeoutInterval: timeoutInterval) { jsonObject, error, duration in
- if jsonObject != nil {
- let paraseData = paraseJsonObject(respondDict: jsonObject as! [String: Any])
- response(paraseData.0, paraseData.1, paraseData.2, duration)
- } else {
- response(nil, nil, error, duration)
- }
- }
- }
-
- /// 校验图片是否有效
- /// - Parameter url: <#url description#>
- /// - Returns: <#description#>
- public class func imageValideRequestData(url: String, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) {
- if !SWNetRequest.bf_validURL(url: url) {
- completionHandler(nil, nil, PQError(msg: "url错误", code: 1001))
- return
- }
- // http://www.mxfjx.com/uploadfiles/2014/4/小鸡%20鸡蛋%20蛋生鸡%20鸡生蛋_conew1.gif
- let tempUrl = SWNetRequest.bf_urlEncoded(url: url)
- let reqUrl = URL(string: tempUrl)!
- var request = URLRequest(url: reqUrl)
- request.timeoutInterval = 1 // 设置超时1s
- request.httpMethod = "HEAD"
- let session = URLSession.shared
- let headTask = session.dataTask(with: request) { data, response, error in
- completionHandler(data, response, error)
- debugPrint("head请求返回 = \(url),code = \((response as? HTTPURLResponse)?.statusCode ?? 0),response = \(String(describing: response))")
- }
- headTask.resume()
- }
-
- /// 处理请求参数
- /// - Parameters:
- /// - encoding: <#encoding description#>
- /// - parames: <#parames description#>
- /// - commonParams: <#commonParams description#>
- /// - Returns: <#description#>
- public class func requestParams(encoding: ParameterEncoding, parames: [String: Any]?, commonParams: [String: Any]?) -> [String: Any]? {
- if parames == nil || (parames?.keys.count ?? 0) <= 0 {
- return commonParams
- }
- if commonParams == nil || (commonParams?.keys.count ?? 0) <= 0 {
- return nil
- }
- var requestParams: [String: Any] = Dictionary<String, Any>.init()
- var tempCommonParams: [String: Any] = commonParams ?? Dictionary<String, Any>.init()
- var tempParames: [String: Any] = parames ?? Dictionary<String, Any>.init()
- tempCommonParams["abInfoData"] = bf_dictionaryToJsonString(dic: bf_abInfoData) ?? ""
- if encoding is JSONEncoding {
- requestParams["baseInfo"] = commonParams
- requestParams["params"] = parames
- } else {
- requestParams = tempCommonParams
- tempParames.removeValue(forKey: "abInfoData")
- for (key, value) in tempParames.reversed() {
- requestParams[key] = value
- }
- }
- return requestParams
- }
- /// 解析成功数据
- /// - Parameter respondDict: <#respondDict description#>
- /// - Returns: <#description#>
- public class func paraseJsonObject(respondDict: [String: Any]) -> (Any?, [String: Any]?, error: PQError?) {
- if respondDict.keys.contains("code") && "\(respondDict["code"] ?? "")" == "0" && respondDict.keys.contains("data") {
- let extData = respondDict["extData"] as? [String: Any]
- if extData != nil, extData?.keys.contains("abInfoData") ?? false {
- bf_parasABinfoData(abInfo: extData?["abInfoData"] as? String)
- }
- return (respondDict["data"], extData, nil)
- } else if (respondDict.keys.contains("msg") && "\(respondDict["msg"] ?? "")".count > 0) || (respondDict.keys.contains("message") && "\(respondDict["message"] ?? "")".count > 0) {
- return (respondDict["data"], nil, PQError(msg: "\(respondDict["msg"] ?? "")", code: Int("\(respondDict["code"] ?? "")") ?? 10001))
- } else {
- return (nil, nil, PQError(msg: "\(respondDict["msg"] ?? "")", code: Int("\(respondDict["code"] ?? "")") ?? 10001))
- }
- }
- /// 解析abInfoData
- /// - Parameter abInfo: <#abInfo description#>
- /// - Returns: description
- private static func bf_parasABinfoData(abInfo: String?) {
- if abInfo != nil, (abInfo?.count ?? 0) > 0, abInfo != "{}" {
- guard let infoDic = bf_jsonStringToDictionary(abInfo!) else { return }
- bf_abInfoData.merge(infoDic, uniquingKeysWith: { (key, _) -> Any in
- key
- })
- }
- }
- private static func bf_jsonStringToDictionary(_ str: String) -> [String: Any]? {
- let data = str.data(using: String.Encoding.utf8)
- if data == nil {
- return [:]
- }
- if let dict = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any] {
- return dict
- }
- return [:]
- }
- private static func bf_dictionaryToJsonString(dic: [String: Any]) -> String? {
- if !JSONSerialization.isValidJSONObject(dic) {
- return ""
- }
- guard let data = try? JSONSerialization.data(withJSONObject: dic, options: []) else {
- return ""
- }
- let str = String(data: data, encoding: String.Encoding.utf8)
- return str
- }
- }
|