我在我的swift应用程序中使用Moya进行网络请求。
我能够获得请求和映射结果使用Moya-Object Mapper。
我以前使用过alamofire,我熟悉如何进行post,获取请求和阅读响应头。
然而,我似乎无法理解我怎么能在莫亚也这样做。
我确实浏览了文档,但它没有说明任何关于读取响应头的内容。
有没有任何例子或教程,我可以遵循如何做一个HTTP身份验证和读取响应头。以及如何发出post请求并将参数作为字段参数或json主体发送。
我已经看过Moya的例子了。
任何帮助都将不胜感激。谢谢。
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
您可以在获得响应(即
我建议您跟踪我提出的问题,知道它何时会在下一个版本中实现,下一个版本将包含这个
好处:如果您在项目中使用SwiftLint,您可以使用
guard let resp = response.response as? HTTPURLResponse
如果有人仍然对使用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's engine调用的
null
switch result {
case let .success(moyaResponse):
if(moyaResponse.statusCode == 200) {
let response = moyaResponse.response
let responseHeaderDictionary = response?.allHeaderFields
}
}