ios - 使用 Moya 获取响应头

标签 ios swift http post moya

我在我的 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/

相关文章:

ios - 切换到文件共享已启用 false

ios - NSString 中的对象太多? %@.%@.%@ 产生格式错误

php - 使用 PHP 发送 POST 请求

java - 在内网开一个http连接开销大吗?

javascript - UIAutomation 访问 TableView 时出现问题

ios - iPhone 已拒绝启动请求 Unspecified

ios - ReSwift - 在动画中间接收 Action

ios - SwiftUI View 无法正确呈现为UIImage

ios - 如何扩展 UITableView?

c# - 在 .NET 中从 URL 读取字符串的最简单方法