如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?
Posted
技术标签:
【中文标题】如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?【英文标题】:How can I use Alamofire to add auth header to each request, and do something if the response is 401? 【发布时间】:2018-01-01 13:44:13 【问题描述】:如何使用 Alamofire 网络框架为每个请求添加 Authorization 标头,并检查服务器的响应是否为 401,以便我可以相应地进行逻辑处理,并呈现某种登录视图。
我需要创建某种包装 Alamofire 请求的 HttpService 类吗?还是有更内置的方法?
【问题讨论】:
看看learnwithmehere.blogspot.in/2016/09/… 【参考方案1】:根据您的要求,我个人更喜欢有一个中间类来调用 Alamofire 的方法。
为此,您可以在每个 Web 服务调用中添加 auth 标头。
以下是中级类的示例。
WebClient.swift
class WebClient: SessionManager
static let sharedManager = WebClient()
func responseRequest(_ url: String, method: Alamofire.HTTPMethod, parameter: Parameters? = nil, encoding: ParameterEncoding, header: HTTPHeaders? = nil, completionHandler: @escaping (DefaultDataResponse) -> Void) -> Void
self.request(url, method: method, parameters: parameter, encoding: encoding, headers: header).response response in
completionHandler(response)
您可以根据需要修改上述类,也可以直接在请求方法中为每个 Web 服务调用传递标头。
【讨论】:
你继承的 SessionManager 是什么?【参考方案2】:为 HTTP Basic Auth 添加授权标头并检查状态代码相当容易:
Alamofire
.request(...)
.authenticate(user: "username", password: "password")
.response response in
if let status = response.response?.statusCode, status == 401
// got a 401 response
【讨论】:
以上是关于如何使用 Alamofire 为每个请求添加 auth 标头,如果响应为 401 则执行某些操作?的主要内容,如果未能解决你的问题,请参考以下文章
将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求
如何使用 Alamofire 为 http 请求编写单元测试?
如何在 Alamofire Swift 的 POST 请求中添加标头参数(-H、-u、-X、-d)