我们如何 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
- 使用它来设置提供者
let provider: MoyaProvider<API> = MoyaProvider<API>(plugins: [NetworkLoggerPlugin()]
- 在 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])
我们如何调试设置到后端服务器的请求?
我希望能够准确地看到或打印出带有 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
- 使用它来设置提供者
let provider: MoyaProvider<API> = MoyaProvider<API>(plugins: [NetworkLoggerPlugin()]
- 在 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])