我们如何使用 Moya 调试/查看通过 API 设置的请求?

Ham*_*ari 10 ios swift moya

我们如何调试设置到后端服务器的请求?

我希望能够准确地看到或打印出带有标头参数等的完整请求......每当我提出任何请求时,这些请求都会被发送到服务器 Moya

Ham*_*ari 12

这是通过激活Moya已经拥有的插件来完成的。它是NetworkLoggerPlugin。我需要更改这行代码:

var provider = MoyaProvider<MainAPI>()
Run Code Online (Sandbox Code Playgroud)

和:

var provider = MoyaProvider<MainAPI>(plugins: [NetworkLoggerPlugin(verbose: true)])
Run Code Online (Sandbox Code Playgroud)

感谢@Anbu.Karthik

  • 从 moya 14.0 开始,我们不能使用 `verbose: true` (3认同)
  • 很高兴看到这个 (2认同)

Sta*_*tan 8

从 Moya 14.0 开始,您需要执行以下操作:

let loggerConfig = NetworkLoggerPlugin.Configuration(logOptions: .verbose)
let networkLogger = NetworkLoggerPlugin(configuration: loggerConfig)    
let provider = MoyaProvider<YourAPI>(plugins: [networkLogger])
Run Code Online (Sandbox Code Playgroud)


Eug*_*eny 6

如果使用 14 的 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) {
            print("request to send: \(str))")
        }
        #endif
        return request
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用: let provider = MoyaProvider<AuthService>(plugins: [VerbosePlugin(verbose: true)])


Cha*_*ara 6

对于 Moya 14.0 及以上版本,请像这样使用

let plugin: PluginType = NetworkLoggerPlugin(configuration: .init(logOptions: .verbose))

let provider = MoyaProvider<T>(plugins: [plugin])
Run Code Online (Sandbox Code Playgroud)