修改有效载荷的 Alamofire 重试请求
Posted
技术标签:
【中文标题】修改有效载荷的 Alamofire 重试请求【英文标题】:Alamofire retry request with modified payload 【发布时间】:2019-12-06 09:26:43 【问题描述】:当我收到某个 400 错误时,我一直在考虑使用 alamofire 重试请求,并且到目前为止重试有效,但是我不确定是否可以修改请求对象,以便在重试时它有一个更新的有效载荷。
欢迎任何建议和阅读材料的链接。
这是我的代码:
class HTTP412Retrier: RequestRetrier, RequestAdapter
func adapt(_ urlRequest: URLRequest) throws -> URLRequest
print("called") // this is not being printed
return urlRequest
func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion)
if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 412
completion(request.retryCount < 3, 0.0)
else
completion(false, 0.0)
【问题讨论】:
【参考方案1】:文档谈论adapting and retrying requests,所以我认为这就是您要查找的内容。
我编写了以下内容,它按预期命中了adapt(_:)
函数
import UIKit
import Alamofire
class ViewController: UIViewController
let sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
override func viewDidLoad()
super.viewDidLoad()
sessionManager.adapter = AccessTokenAdapter(accessToken: "1234")
sessionManager.request("http://example.com")
class AccessTokenAdapter: RequestAdapter
private let accessToken: String
init(accessToken: String)
self.accessToken = accessToken
func adapt(_ urlRequest: URLRequest) throws -> URLRequest
var urlRequest = urlRequest
guard let urlString = urlRequest.url?.absoluteString, urlString.hasPrefix("https://example.com") else return urlRequest
urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
return urlRequest
【讨论】:
谢谢我试图在这个函数中设置一个断点,但是在重试期间应该调用函数时没有调用它 看不到任何代码,实在是帮不上忙了 您是否通过会话管理器使用上述代码并将会话管理器的适配器分配为上述适配器? 是的,应该可以正常调用该函数,但没有调用适配器 我已将代码添加到我的答案中。在adapter函数中设置断点表明它被调用了以上是关于修改有效载荷的 Alamofire 重试请求的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire/RxSwift 如何在状态码 401 上自动刷新令牌和重试请求