HTTPRequest
open class HTTPRequest : HTTPRequestProtocol, Equatable, CustomStringConvertible, @unchecked Sendable
HTTP请求基类,支持缓存和重试机制,使用时继承即可
注意事项: 如果vc请求回调句柄中未使用weak self,会产生强引用,则self会在vc关闭且等待请求完成后才会释放 如果vc请求回调句柄中使用了weak self,不会产生强引用,则self会在vc关闭时立即释放,不会等待请求完成
-
请求完成句柄
Declaration
Swift
public typealias Completion = @MainActor @Sendable (HTTPRequest) -> Void -
请求构建器,可继承
继承HTTPRequest并重载Builder示例:
class AppRequest: HTTPRequest { class Builder: HTTPRequest.Builder { override func build() -> AppRequest { return AppRequest(builder: self) } } }使用AppRequest.Builder示例:
See morelet request = AppRequest.Builder()/*...*/.build()Declaration
Swift
open class Builder
-
自定义请求代理
Declaration
Swift
open weak var delegate: RequestDelegate? -
自定义标签,默认0
Declaration
Swift
open var tag: Int -
当前请求的上下文,支持UIViewController|UIView
Declaration
Swift
open weak var context: AnyObject? -
是否自动显示错误信息,context可不存在
Declaration
Swift
open var autoShowError: Bool -
是否自动显示加载信息,context必须存在
Declaration
Swift
open var autoShowLoading: Bool -
自定义成功主线程回调句柄
Declaration
Swift
open var successCompletionBlock: Completion? -
自定义失败主线程回调句柄
Declaration
Swift
open var failureCompletionBlock: Completion? -
自定义请求结束主线程回调句柄,成功失败都会触发
Declaration
Swift
open var requestCompletedBlock: Completion? -
自定义取消回调句柄,不一定主线程调用
Declaration
Swift
open var requestCancelledBlock: (@Sendable (HTTPRequest) -> Void)? -
自定义请求配件数组
Declaration
Swift
open var requestAccessories: [RequestAccessoryProtocol]? -
自定义POST请求HTTP body数据
Declaration
Swift
open var constructingBodyBlock: (@Sendable (RequestMultipartFormData) -> Void)? -
断点续传下载路径
Declaration
Swift
open var resumableDownloadPath: String? -
断点续传进度句柄
Declaration
Swift
open var downloadProgressBlock: (@Sendable (Progress) -> Void)? -
上传进度句柄
Declaration
Swift
open var uploadProgressBlock: (@Sendable (Progress) -> Void)? -
请求优先级,默认default
Declaration
Swift
open var requestPriority: RequestPriority -
是否是同步串行请求,默认false为异步并发请求
Declaration
Swift
open var isSynchronously: Bool -
自定义用户信息
Declaration
Swift
open var requestUserInfo: [AnyHashable : Any]? -
是否预加载请求缓存模型(一般仅GET开启),注意开启后当缓存存在时会调用成功句柄一次,默认false
Declaration
Swift
open var preloadCacheModel: Bool { get set } -
判断缓存是否存在
Declaration
Swift
open var isResponseCached: Bool { get } -
是否是本地缓存数据
Declaration
Swift
open private(set) var isDataFromCache: Bool { get } -
当前请求唯一标志符,只读
Declaration
Swift
public let requestIdentifier: String -
当前请求适配器,根据插件不同而不同
Declaration
Swift
open var requestAdapter: Any? -
当前URLSessionTask,请求开始后才可用
Declaration
Swift
open var requestTask: URLSessionTask? -
当前响应Header
Declaration
Swift
open var responseHeaders: [AnyHashable : Any]? { get } -
当前响应状态码
Declaration
Swift
open var responseStatusCode: Int { get } -
当前响应服务器时间
Declaration
Swift
open var responseServerTime: TimeInterval { get } -
请求开始时间
Declaration
Swift
open internal(set) var requestStartTime: TimeInterval { get } -
请求总次数
Declaration
Swift
open internal(set) var requestTotalCount: Int { get } -
请求总时长
Declaration
Swift
open internal(set) var requestTotalTime: TimeInterval { get } -
请求是否已完成,requestTask必须完成且error为nil
Declaration
Swift
open var isFinished: Bool { get } -
请求是否已失败,error不为nil,不检查requestTask
Declaration
Swift
open var isFailed: Bool { get } -
请求是否已取消,含手动取消和requestTask取消
Declaration
Swift
open var isCancelled: Bool { get } -
请求是否已开始,已开始之后再次调用start不会生效
Declaration
Swift
open private(set) var isStarted: Bool { get } -
请求是否已暂停,已开始之后才可暂停
Declaration
Swift
open private(set) var isSuspended: Bool { get } -
请求是否执行中,requestTask状态为running
Declaration
Swift
open var isExecuting: Bool { get } -
当前响应数据
Declaration
Swift
open var responseData: Data? { get set } -
当前响应字符串
Declaration
Swift
open var responseString: String? { get set } -
当前响应对象
Declaration
Swift
open var responseObject: Any? { get set } -
当前响应JSON对象
Declaration
Swift
open var responseJSONObject: Any? { get set } -
当前网络错误
Declaration
Swift
open var error: Error? { get set } -
自定义请求配置,未设置时使用全局配置
Declaration
Swift
open var config: RequestConfig! { get set } -
请求构建器,从构建器初始化时才有值
Declaration
Swift
open private(set) var builder: Builder? { get } -
请求上下文控件,可自定义
Declaration
Swift
open var contextAccessory: RequestContextAccessory { get set }
-
初始化方法
Declaration
Swift
public init() -
指定构建器并初始化
Declaration
Swift
public convenience init(builder: Builder) -
请求描述
Declaration
Swift
open var description: String { get }
-
请求基准URL,默认空,示例:https://www.wuyong.site
Declaration
Swift
open func baseUrl() -> String -
请求URL地址,默认空,示例:/v1/user
Declaration
Swift
open func requestUrl() -> String -
请求可选CDN地址,默认空
Declaration
Swift
open func cdnUrl() -> String -
是否使用CDN
Declaration
Swift
open func useCDN() -> Bool -
是否允许蜂窝网络访问,默认true
Declaration
Swift
open func allowsCellularAccess() -> Bool -
请求超时,默认60秒
Declaration
Swift
open func requestTimeoutInterval() -> TimeInterval -
自定义请求缓存策略,默认nil不处理
Declaration
Swift
open func requestCachePolicy() -> URLRequest.CachePolicy? -
请求方式,默认GET
Declaration
Swift
open func requestMethod() -> RequestMethod -
请求附加参数,建议[String: Any]?,默认nil
Declaration
Swift
open func requestArgument() -> Any? -
请求序列化方式,默认HTTP
Declaration
Swift
open func requestSerializerType() -> RequestSerializerType -
响应序列化方式,默认JSON
Declaration
Swift
open func responseSerializerType() -> ResponseSerializerType -
HTTP请求授权Header数组,示例:[“UserName”, “Password”]
Declaration
Swift
open func requestAuthorizationHeaders() -> [String]? -
自定义请求Header字典
Declaration
Swift
open func requestHeaders() -> [String : String]? -
请求发送前URLRequest过滤方法,默认不处理
Declaration
Swift
open func urlRequestFilter(_ urlRequest: inout URLRequest) throws -
构建自定义URLRequest
Declaration
Swift
open func customUrlRequest() -> URLRequest?
-
JSON验证器,默认支持AnyValidator
Declaration
Swift
open func jsonValidator() -> Any? -
状态码验证器
Declaration
Swift
open func statusCodeValidator() -> Bool -
调试请求Mock验证器,默认判断404
Declaration
Swift
open func responseMockValidator() -> Bool -
调试请求Mock处理器,请求失败时且回调前在后台线程调用
Declaration
Swift
open func responseMockProcessor() -> Bool -
请求回调前Response过滤方法,默认成功不抛异常
Declaration
Swift
open func responseFilter() throws -
是否后台预加载响应模型,默认false,仅ResponseModelRequest生效
Declaration
Swift
open func preloadResponseModel() -> Bool -
请求完成预处理器,后台线程调用。默认写入请求缓存、预加载响应模型
Declaration
Swift
open func requestCompletePreprocessor() -
请求完成过滤器,主线程调用,默认不处理
Declaration
Swift
@MainActor open func requestCompleteFilter() -
请求失败预处理器,后台线程调用,默认不处理
Declaration
Swift
open func requestFailedPreprocessor() -
请求失败过滤器,主线程调用,默认不处理
Declaration
Swift
@MainActor open func requestFailedFilter()
-
请求重试次数,默认0
Declaration
Swift
open func requestRetryCount() -> Int -
请求重试间隔,默认0
Declaration
Swift
open func requestRetryInterval() -> TimeInterval -
请求重试超时时间,默认0
Declaration
Swift
open func requestRetryTimeout() -> TimeInterval -
请求重试验证方法,默认检查状态码和错误
Declaration
Swift
open func requestRetryValidator(_ response: HTTPURLResponse?, responseObject: Any?, error: Error?) -> Bool -
请求重试处理方法,回调处理状态,默认调用completionHandler(true)
Declaration
Swift
open func requestRetryProcessor(_ response: HTTPURLResponse?, responseObject: Any?, error: Error?, completionHandler: @escaping @Sendable (Bool) -> Void)
-
缓存有效期,默认-1不缓存
Declaration
Swift
open func cacheTimeInSeconds() -> Int -
缓存版本号,默认0
Declaration
Swift
open func cacheVersion() -> Int -
缓存敏感数据,变化时会更新缓存
Declaration
Swift
open func cacheSensitiveData() -> Any? -
缓存文件名过滤器,参数为请求参数,默认返回argument
Declaration
Swift
open func cacheArgumentFilter(_ argument: Any?) -> Any? -
是否异步写入缓存,默认true
Declaration
Swift
open func writeCacheAsynchronously() -> Bool
-
当前请求的上下文,支持UIViewController|UIView
Declaration
Swift
@discardableResult open func context(_ context: AnyObject?) -> Self -
开始请求,已开始后重复调用无效
Declaration
Swift
@discardableResult open func start() -> Self -
暂停请求,已开始后调用才会生效
Declaration
Swift
@discardableResult open func suspend() -> Self -
继续请求,未开始或暂停后可调用
Declaration
Swift
@discardableResult open func resume() -> Self -
取消请求
Declaration
Swift
open func cancel() -
断点续传进度句柄
Declaration
Swift
@discardableResult open func downloadProgress(_ block: (@Sendable (Progress) -> Void)?) -> Self -
上传进度句柄
Declaration
Swift
@discardableResult open func uploadProgress(_ block: (@Sendable (Progress) -> Void)?) -> Self -
是否自动显示加载信息,context必须存在
Declaration
Swift
@discardableResult open func autoShowLoading(_ autoShowLoading: Bool) -> Self -
是否自动显示错误信息,context可不存在
Declaration
Swift
@discardableResult open func autoShowError(_ autoShowError: Bool) -> Self -
显示加载条,默认显示加载插件,context必须存在
Declaration
Swift
open func showLoading() -
隐藏加载条,默认隐藏加载插件,context必须存在
Declaration
Swift
open func hideLoading() -
显示网络错误,默认显示Toast提示,context可不存在
Declaration
Swift
open func showError() -
清理完成句柄
Declaration
Swift
open func clearCompletionBlock() -
添加请求配件
Declaration
Swift
@discardableResult open func addAccessory(_ accessory: RequestAccessoryProtocol) -> Self
-
快捷设置响应失败句柄
Declaration
Swift
@discardableResult open func responseError(_ block: (@MainActor @Sendable (Error) -> Void)?) -> Self -
设置是否预加载响应模型,仅ResponseModelRequest生效
Declaration
Swift
@discardableResult open func preloadResponseModel(_ preload: Bool) -> Self -
快捷设置模型响应成功句柄,解析成功时自动缓存,支持后台预加载
Declaration
Swift
@discardableResult open func responseModel<T>(of type: T.Type, designatedPath: String? = nil, success: (@MainActor @Sendable (T?) -> Void)?) -> Self where T : AnyModel -
快捷设置安全模型响应成功句柄,解析成功时自动缓存,支持后台预加载
Declaration
Swift
@discardableResult open func safeResponseModel<T>(of type: T.Type, designatedPath: String? = nil, success: (@MainActor @Sendable (T) -> Void)?) -> Self where T : AnyModel
-
是否预加载请求缓存模型(一般仅GET开启),注意开启后当缓存存在时会调用成功句柄一次
Declaration
Swift
@discardableResult open func preloadCacheModel(_ preloadCacheModel: Bool) -> Self -
解析指定缓存响应模型句柄,必须在start之前调用生效
Declaration
Swift
@discardableResult open func responseCacheModel<T>(of type: T.Type, designatedPath: String? = nil, success: (@MainActor @Sendable (T?) -> Void)?) -> Self where T : AnyModel -
解析指定缓存安全响应模型句柄,必须在start之前调用生效
Declaration
Swift
@discardableResult open func responseSafeCacheModel<T>(of type: T.Type, designatedPath: String? = nil, success: (@MainActor @Sendable (T) -> Void)?) -> Self where T : AnyModel -
加载本地缓存,返回是否成功
Declaration
Swift
open func loadCache() throws -
保存指定数据到缓存文件
Declaration
Swift
@discardableResult open func saveCache(_ data: Data?) -> Bool -
缓存唯一Id,子类可重写
Declaration
Swift
open func cacheIdentifier() -> String
-
Declaration
Swift
public static func == (lhs: HTTPRequest, rhs: HTTPRequest) -> Bool
View on GitHub