在 Moya 14 中记录响应和请求

Posted

技术标签:

【中文标题】在 Moya 14 中记录响应和请求【英文标题】:Logging response and request in Moya 14 【发布时间】:2020-04-28 11:56:50 【问题描述】:

有什么方法可以在不使用详细信息的情况下在 Moya 14 中记录我的请求和响应?

container.register(NetworkLoggerPlugin.self)  r in
   NetworkLoggerPlugin(verbose: true)
   .inObjectScope(.container)

提前谢谢你。

【问题讨论】:

【参考方案1】:

最初的指导是 elsewhere 为 Moya 创建一个自定义插件,但这里有一个详细插件的工作示例,它将显示请求和响应数据。

将以下代码添加到您调用 Moya 的任何位置:

struct VerbosePlugin: PluginType 
    let verbose: Bool

    func prepare(_ request: URLRequest, target: TargetType) -> URLRequest 
        #if DEBUG
        if let body = request.httpBody,
           let str = String(data: body, encoding: .utf8) 
            if verbose 
                print("request to send: \(str))")
            
        
        #endif
        return request
    

    func didReceive(_ result: Result<Response, MoyaError>, target: TargetType) 
        #if DEBUG
        switch result 
        case .success(let body):
            if verbose 
                print("Response:")
                if let json = try? JSONSerialization.jsonObject(with: body.data, options: .mutableContainers) 
                    print(json)
                 else 
                    let response = String(data: body.data, encoding: .utf8)!
                    print(response)
                
            
        case .failure( _):
            break
        
        #endif
    


在您的设置中,添加新插件:

let APIManager = MoyaProvider<API>( plugins: [
    VerbosePlugin(verbose: true)
    ])

这将输出正在发出的请求和返回的响应。如果响应是 JSON 编码的,它将漂亮地打印 JSON,否则它将尝试打印出原始响应数据。

【讨论】:

【参考方案2】:

MoyaProvider(插件:[NetworkLoggerPlugin()])

【讨论】:

这是一个用于打印活动的内置类。

以上是关于在 Moya 14 中记录响应和请求的主要内容,如果未能解决你的问题,请参考以下文章

使用 Moya 获取响应标头

如何在不发送请求的情况下拦截 Moya 请求并返回失败响应

RxSwift 和 Moya 同步请求

从 Moya 响应中获取响应

如何从 Moya 框架中禁用 Moya_Logger

在 Netfox 和 Moya 中记录 HTTPBody