我们如何 debug/see 通过 Moya API 设置请求?

How do we debug/see the request being set over API with Moya?

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

我希望能够准确地看到或打印出带有 headers 参数等的完整请求...每当我通过 [=12= 发出任何请求时,这些请求都会被发送到服务器]

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

var provider = MoyaProvider<MainAPI>()

与:

var provider = MoyaProvider<MainAPI>(plugins: [NetworkLoggerPlugin(verbose: true)])

莫亚 >= 14

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

let provider = MoyaProvider<T>(plugins: [plugin])

感谢@Anbu.Karthik

  1. 使用它来设置提供者let provider: MoyaProvider<API> = MoyaProvider<API>(plugins: [NetworkLoggerPlugin()]
  2. 在 Moya pod 的 NetworkLoggerPlugin.swift 文件中,您可以在给定的 Configuration 结构中更改 logOptions。在初始化方法中 logOptions: LogOptions = .requestBody 可以更改。这是一个枚举。因此,您可以根据需要尝试更改 logOptions 值。

* 我认为可以更改 pod 文件,因为它不会影响代码库,因为这是开发人员端的日志记录选项

如果从 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
    }
}

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

Cross-posted:

这是一个详细插件的工作示例,它将显示请求和响应数据。

将以下代码添加到您调用 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,否则它将尝试打印出原始响应数据。

从 Moya 14.0 开始,您需要这样做:

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

对于 Moya 14.0 及更高版本,请像这样使用

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

let provider = MoyaProvider<T>(plugins: [plugin])