当前位置: 首页 > 知识库问答 >
问题:

使用Moya获取响应报头

拓拔辰钊
2023-03-14

我在我的swift应用程序中使用Moya进行网络请求。

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

我以前使用过alamofire,我熟悉如何进行post,获取请求和阅读响应头。

然而,我似乎无法理解我怎么能在莫亚也这样做。

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

有没有任何例子或教程,我可以遵循如何做一个HTTP身份验证和读取响应头。以及如何发出post请求并将参数作为字段参数或json主体发送。

我已经看过Moya的例子了。

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

共有3个答案

闻人举
2023-03-14

null

switch result {
case let .success(moyaResponse):
     if(moyaResponse.statusCode == 200) {
          let response = moyaResponse.response
          let responseHeaderDictionary = response?.allHeaderFields
     }
}
龙俊德
2023-03-14

如果有人仍然对使用Moya时如何获取url请求对象感兴趣,下面是另一个实现:

extension NetworkApiService {
public var urlRequest: URLRequest {
    let defaultURL: URL
    if path.isEmpty {
        defaultURL = baseURL
    } else {
        defaultURL = baseURL.appendingPathComponent(path)
    }

    let endpoint = MoyaProvider.defaultEndpointMapping(for: self)
    do {
        return try endpoint.urlRequest()
    } catch {
        return URLRequest(url: defaultURL)
    }
}
}

其中 符合Moya的 协议。

请注意,返回的实例与Moya's engine调用的 对象不完全相同,而是使用Moya's API实例化的,并且具有与原始实例相同的配置

曾华翰
2023-03-14

Moya中的响应头实际上目前相当困难。这是莫亚密码里一个不受欢迎的老掉牙。我不知道他们为什么会轻视它。

我打开一个相关问题指出:莫亚头

并做一些更改感谢一个拉请求:Moya header PR

这是我的个人代码的一个示例,我在其中强制传送响应以获得对标头的访问:

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中强制广播它

我建议您跟踪我提出的问题,知道它何时会在下一个版本中实现,下一个版本将包含这个

好处:如果您在项目中使用SwiftLint,您可以使用 强制转换它

guard let resp = response.response as? HTTPURLResponse
 类似资料:
  • 问题内容: 我是Node开发的新手,我正在尝试使用具有JSON响应的RESTful协议进行服务器端API调用。我已经阅读了API文档和本SO帖子。 我试图从轨道总线中提取的API并以JSON输出返回数据。我对如何使用实际URL中的所有参数和选项发出HTTP GET请求感到困惑。甚至可以通过浏览器或使用“ curl”命令来访问API及其响应。http://developer.cumtd.com/ap

  • 我想使用响应头来确定是否获得响应正文,场景如下,我需要确定响应头中的会话是否过期,以确定是否继续下载文件。如果会话过期,只需取消下载。 我看了看OKHTTP的拦截器,觉得它不符合我的要求。

  • 问题内容: 我正在尝试寻找在Android中发出USSD请求的方法。我找到了-http://commandus.com/blog/?p=58。我将所有需要的文件添加到我的项目中。 USSDDumbExtendedNetworkService.java: 表现: BootReceiver.java: 因此,现在该服务在启动完成后启动。 我的问题是我如何发送USSD请求并获得服务响应?谢谢!) 问题答

  • 问题内容: 所以这是我的问题,我正在使用AJAX(jQuery)将表单发布到,但是页面实际上需要回显诸如或的响应。我不确定如何从中获取响应并将其存储为变量… 这是我到目前为止的代码: 我还需要在json中回显响应吗?还是纯文本会好? 抱歉,这听起来像是一个愚蠢的问题,这是我第一次在Ajax中进行此类操作。 PS:如何在上述代码中命名POST请求? 问题答案: 实际上,这是服务器上所需的全部内容。

  • 我想问一下在执行查询时如何从PostgreSQL获得消息响应。 来自PostgreSQL的消息响应我的意思是这样的,例如: null

  • 我的问题是我如何发送USSD请求并得到服务响应?(谢谢!)