我在我的 swift 应用程序中使用 Moya 进行网络请求。
我能够使用 Moya- Object Mapper 获取请求并映射结果。
我之前用过alamofire,熟悉发帖、获取请求、读取响应头的方法。
但是,我似乎无法理解如何在 Moya 中做同样的事情。
我确实浏览了文档,但它没有说明有关阅读响应 header 的任何内容。
是否有任何示例或教程可以让我了解如何进行 HTTP 身份验证和阅读响应 header 。以及如何发出发布请求并将参数作为字段参数或 json 正文发送。
我已经完成了 Moya 示例。
任何帮助将不胜感激。谢谢。
最佳答案
Moya 中的响应头目前实际上相当困难。这是 Moya 代码中不需要的旧的沮丧。我永远不知道他们为什么不看好它。
我开了一个相关的issue来指出:Moya header
并通过拉取请求进行一些更改:Moya header PR
这是我的个人代码示例,我在其中强制转换响应以访问 header :
class GetTokenRequest {
private let requestService = AuthorizedRequest()
func request() -> Observable<AuthorizedResult<GetTokenEntityResult>> {
return Observable.deferred { [weak self] in
guard let wself = self else {
return Observable.empty()
}
let req = wself.requestService.makeRawRequest { userId in
let obj = GetTokenEntity(lang: currentLanguage(), userId: userId)
return MtxAPI.getToken(obj)
}
.shareReplay(1)
return req.map { result in
switch result {
case .success(let response):
let urlResponse = response.response as! HTTPURLResponse
guard let token = urlResponse.allHeaderFields["Token"] as? String else {
return AuthorizedResult.fail(RequestError.technical)
}
return AuthorizedResult.success(GetTokenEntityResult(token: token))
case .fail(let error): return AuthorizedResult.fail(error)
}
}
}
}
}
我正在使用 RxSwift,但主线是:
let urlResponse = response.response as! HTTPURLResponse
您可以在收到响应(这是一个 Moya.Response
)时在您使用的 map/mapObject/mapArray 中强制转换它
我建议您关注我提出的问题,以了解它何时会在包含此重大更改
的下一个版本中实现
奖励:如果你在你的项目中使用 SwiftLint,你可以使用 guard/let
guard let resp = response.response as? HTTPURLResponse
关于ios - 使用 Moya 获取响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752351/