使用 Moya 获取响应标头

2024-02-28

我在我的 swift 应用程序中使用 Moya 来处理网络请求。

我能够使用 Moya-Object Mapper 获取请求并映射结果。

我之前使用过 alamofire,熟悉如何发布、获取请求和读取响应头。

然而,我似乎不明白如何在 Moya 中做同样的事情。

我确实浏览了文档,但它没有说明有关读取响应标头的任何内容。

是否有任何示例或教程可以让我了解如何进行 HTTP 身份验证并读取响应标头。还介绍了如何发出 post 请求并将参数作为字段参数或 json 正文发送。

我已经讲过 Moya 的例子了。

任何帮助将不胜感激。谢谢。


事实上,Moya 中的响应头目前相当困难。这是 Moya 代码中不必要的旧的沮丧。我永远不知道他们为什么对此感到沮丧。

我开了一个相关问题来指出这一点:莫亚头球 https://github.com/Moya/Moya/pull/1044

并通过拉取请求进行一些更改:莫亚头条公关 https://github.com/Moya/Moya/issues/1040

这是我的个人代码示例,我在其中强制转换响应以访问标头:

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

当您收到响应时,您可以将其强制转换到您使用的map/mapObject/mapArray中(这是一个Moya.Response)

我建议您关注我提出的问题,以了解它将在包含此内容的下一个版本中何时实施breaking change

奖励:如果您在项目中使用 SwiftLint,您可以使用guard/let

guard let resp = response.response as? HTTPURLResponse
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Moya 获取响应标头 的相关文章

随机推荐

  • 清除 Android 浏览器历史记录

    我正在为客户编写一个应用程序 该应用程序将有多个可供客户查看和使用的设备 他们希望能够定期清除浏览器历史记录 这样 如果客户打开浏览器访问不适当的网站 下一个客户就不会看到此内容 我目前正在使用它来清除历史记录和搜索 Browser cle
  • 面试问题:递归生成素数最快的方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您遇到的 C 语言常见的未定义/未指定行为有哪些? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 C 语言中未指定行为的一个示例是函数参数的求值顺序 它可能是从左到右或从右到左 你只是不知道 这会影响如何foo c c or foo
  • 将浮点异常转换为 C++ 异常

    是否可以在 x86 Linux 上将浮点异常 信号 转换为 C 异常 这是出于调试目的 因此不可移植性和不完善性是可以的 例如 如果不能 100 保证调用所有析构函数 如果您的 C 标准库实现支持 TR1 函数fetestexcept fe
  • 最终字段和线程安全

    为了线程安全 它应该是特意不可变的 java 类 final 的所有字段 包括超级字段 还是没有修饰符方法就足够了 假设我有一个带有非最终字段的 POJO 其中所有字段都是某个不可变类的类型 这个 POJO 有 getters setter
  • 安装下载的 .apk 文件时解析错误

    嗨 两周后我又开始了我的研究并与这个错误作斗争 解析错误 解析包时出现问题 我的实现范围是尝试从服务器更新我的应用程序 我在该服务器上有更新的 apk 文件 并使用服务通过我的应用程序下载它 现在我在舞台边缘 我可以从该服务器下载文件 我可
  • Android 媒体播放器在 ICS 上永远循环

    我想播放通知声音 但我的问题是声音永远循环 而它应该只响一次 我尝试过两种方法 notification sound Uri parse content media internal audio media 38 and mMediaPla
  • 如何使用 Jersey Rest Webservices 和 Java 解析 JSON 数组

    我从 iOS 客户端获取 Json 数组 并希望使用 Java jersey 和 Gson 在服务器端解析 Json 我正在从 iOS 发送 POST 方法中的 JSON 数组 我想使用 json 但坚持如何在 Java 类中保存 json
  • C++ 的链接迭代器

    Python 的 itertools 实现了chain http docs python org library itertools html itertools chain迭代器本质上连接了许多不同的迭代器以提供单个迭代器的所有内容 C
  • jQuery 等效选择器

    以下内容完全等价吗 你使用哪种习语 为什么 form1 edit field input form1 edit field find input edit field input form1 input form1 edit field 我
  • EF 4.1 Code First:类型中的每个属性名称必须是唯一的查找表关联错误

    这是我第一次尝试创建自己的 EF 模型 我发现自己在尝试使用 Code First 创建查找表关联时陷入困境 以便我可以访问 myProduct Category AltCategoryID 我已经设置了模型和映射 据我所知是正确的 但继续
  • 在R中寻找SIR模型参数的问题

    我正在尝试使用 R 中的 SIR 模型来模拟冠状病毒感染率 但是 如您所见 我的 beta 控制易感者和感染者之间的过渡 和 gamma 控制感染者和康复者之间的过渡 值不正确 beta gamma 1 0000000 0 8407238
  • 如果存在则不能批量工作

    我正在尝试创建一个 bat 文件来创建一个简单的文本文件 我的问题是 Windows XP 主文件夹是C Documents and Settings而 vista 及以上C Users 我正在运行这个 无论我为路径名输入什么 我总是得到i
  • Express 中跨子域的会话

    我正在使用 Express 中的 vhost 功能和 Node 来管理我的应用程序的多个子域 该应用程序使用相同的会话密钥和密钥 并且我相信我已经使用了正确的会话 cookie 设置 cookie path domain example c
  • 如何在 Azure AD B2C 中存储来自 IdentityServer 3 的声明或仅将其包含在 AAD B2C 颁发的令牌中

    我想知道是否可以将 oid 声明或基本上由 Identity Server 3 发出的任何其他声明传播到 AAD B2C 并使其成为 Azure AD B2C 发出的令牌的一部分 我们需要在客户端拥有一个原始 ID 而我们从 sub 和 o
  • 没有框架的javascript ajax请求

    有谁知道如何在不使用 jQuery 等 javascript 框架的情况下制作跨浏览器的 ajax 请求功能 The XMLHttpRequest对象实际上使用起来并不那么复杂 为了广泛兼容 您必须玩一些游戏来创建对象 但之后的简单操作就相
  • 如何在浏览器窗口调整大小时调整CSS中的梯形大小

    当我调整浏览器窗口大小时 我试图调整梯形形状的大小 我试图通过使用来做到这一点box resize但还是没用 是否可以通过使用定义 创建的梯形来做到这一点border黑客 还有什么其他方法可以使梯形能够在调整浏览器窗口大小时调整大小 div
  • Codeigniter - 提交后验证失败时重新填充表单

    我有一个表单 要求用户输入一些信息 如果他们未能填写必填字段 他们将被重新提交表格 页面顶部通知他们需要哪些字段 并且我启用了粘性表单 set value 这样他们的输入就不会丢失 我使用 flashdata 向用户显示消息 即 如果他们输
  • 从 listWidget 中删除选定的项目

    如何从列表中删除选定的项目QListWidget 我尝试编写以下代码 但它不起作用 QList
  • 使用 Moya 获取响应标头

    我在我的 swift 应用程序中使用 Moya 来处理网络请求 我能够使用 Moya Object Mapper 获取请求并映射结果 我之前使用过 alamofire 熟悉如何发布 获取请求和读取响应头 然而 我似乎不明白如何在 Moya