我们如何调试设置到后端服务器的请求?
我希望能够准确查看或打印出带有标头参数的完整请求,等等...每当我通过Moya
发出任何请求时,该请求就会被发送到服务器上
答案 0 :(得分: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
}
}
并使用:let provider = MoyaProvider<AuthService>(plugins: [VerbosePlugin(verbose: true)])
答案 1 :(得分:4)
从Moya 14.0开始,您需要执行以下操作:
let loggerConfig = NetworkLoggerPlugin.Configuration(logOptions: .verbose)
let networkLogger = NetworkLoggerPlugin(configuration: loggerConfig)
let provider = MoyaProvider<YourAPI>(plugins: [networkLogger])
答案 2 :(得分:2)
通过激活Moya
已经拥有的插件来完成。是NetworkLoggerPlugin
。我需要更改以下代码行:
var provider = MoyaProvider<MainAPI>()
具有:
var provider = MoyaProvider<MainAPI>(plugins: [NetworkLoggerPlugin(verbose: true)])
感谢@ Anbu.Karthik
答案 3 :(得分:0)
let provider: MoyaProvider<API> = MoyaProvider<API>(plugins: [NetworkLoggerPlugin()]
NetworkLoggerPlugin.swift
文件中,您可以在给定的logOptions
结构内更改Configuration
。在初始化方法中,logOptions: LogOptions = .requestBody
可以更改。这是一个枚举。因此,您可以尝试根据需要更改logOptions值。 *我认为可以更改pod文件,因为它不会影响代码库,因为这是开发人员端的日志记录选项
答案 4 :(得分:0)
这是一个详细的插件示例,将同时显示请求和响应数据。
将以下代码添加到您从何处致电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,否则它将尝试打印出原始响应数据。
答案 5 :(得分:0)
对于Moya 14.0及更高版本,请像这样使用
let plugin: PluginType = NetworkLoggerPlugin(configuration: .init(logOptions: .verbose))
let provider = MoyaProvider<T>(plugins: [plugin])