我们如何使用 Moya 调试/查看通过 API 设置的请求?
Posted
技术标签:
【中文标题】我们如何使用 Moya 调试/查看通过 API 设置的请求?【英文标题】:How do we debug/see the request being set over API with Moya? 【发布时间】:2019-01-09 08:03:12 【问题描述】:我们如何调试设置到后端服务器的请求?
我希望能够准确查看或打印出带有标头参数等的完整请求...每当我通过Moya
发出任何请求时,这些请求都会发送到服务器
【问题讨论】:
在 moya 中使用NetworkLoggerPlugin.swift --> willSend
你会得到完整的请求
例如,您从here获取样本
感谢您的回复。征得您的许可,我将其添加为答案,以便对其他人有所帮助。
【参考方案1】:
这是通过激活Moya
已经拥有的插件来完成的。它是NetworkLoggerPlugin
。我需要更改这行代码:
var provider = MoyaProvider<MainAPI>()
与:
var provider = MoyaProvider<MainAPI>(plugins: [NetworkLoggerPlugin(verbose: true)])
MOYA >= 14
let plugin: PluginType = NetworkLoggerPlugin(configuration: .init(logOptions: .verbose))
let provider = MoyaProvider<T>(plugins: [plugin])
感谢@Anbu.Karthik
【讨论】:
很高兴看到这个 从 moya 14.0 开始我们不能使用verbose: true
从 Moya 14 我们不能使用它【参考方案2】:
从 Moya 14.0 开始,您需要这样做:
let loggerConfig = NetworkLoggerPlugin.Configuration(logOptions: .verbose)
let networkLogger = NetworkLoggerPlugin(configuration: loggerConfig)
let provider = MoyaProvider<YourAPI>(plugins: [networkLogger])
【讨论】:
【参考方案3】:如果从 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)])
【讨论】:
【参考方案4】: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,否则它将尝试打印出原始响应数据。
【讨论】:
【参考方案5】:对于 Moya 14.0 及更高版本,像这样使用
let plugin: PluginType = NetworkLoggerPlugin(configuration: .init(logOptions: .verbose))
let provider = MoyaProvider<T>(plugins: [plugin])
【讨论】:
【参考方案6】:-
使用它来设置提供程序
let provider: MoyaProvider<API> = MoyaProvider<API>(plugins: [NetworkLoggerPlugin()]
在 Moya pod 的NetworkLoggerPlugin.swift
文件中,您可以在给定的Configuration
结构内更改logOptions
。在init方法中logOptions: LogOptions = .requestBody
可以改变。这是一个枚举。因此,您可以尝试根据需要更改 logOptions 值。
* 我认为更改 pod 文件是可以的,因为它不会影响代码库,因为这是开发人员端的日志记录选项
【讨论】:
嗨,有没有办法使用 NetworkLoggerPlugin logOptions 在编译器中查看我的日志请求和响应?谢谢你。 (***.com/questions/61479627/…)以上是关于我们如何使用 Moya 调试/查看通过 API 设置的请求?的主要内容,如果未能解决你的问题,请参考以下文章