如何使用Alamofire在请求头中同时发送两个Authorization令牌?
解决Alamofire发送多个相同名称请求头的问题
遇到这个问题很正常——因为你用字典字面量创建HTTPHeaders时,字典的键是唯一的,重复的Authorization键会直接导致冲突,甚至触发运行时错误。而HTTP协议本身是允许同一个请求头字段出现多次的,所以我们需要换一种方式来构建请求头。
正确的实现方式
Alamofire的HTTPHeaders类型支持通过HTTPHeader对象数组来初始化,这样就能添加多个同名的请求头了。有两种常用写法:
写法一:逐步添加
// 初始化空的HTTPHeaders对象 var headers = HTTPHeaders() // 添加第一个Authorization令牌 headers.add(HTTPHeader(name: "Authorization", value: "Bearer " + WSO2AuthToken)) // 添加第二个Authorization令牌 headers.add(HTTPHeader(name: "Authorization", value: "Custom " + customAuthToken)) // 发起请求 let request = Alamofire.request(url!, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
写法二:数组直接初始化
// 直接用HTTPHeader数组创建headers let headers = HTTPHeaders([ HTTPHeader(name: "Authorization", value: "Bearer " + WSO2AuthToken), HTTPHeader(name: "Authorization", value: "Custom " + customAuthToken) ]) // 发起请求 let request = Alamofire.request(url!, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
原理说明
HTTPHeaders内部并不是用字典存储的,而是一个有序的HTTPHeader对象集合,所以它允许存在多个同名的请求头字段。而你之前用字典字面量创建时,因为字典的键唯一性限制,重复的Authorization键会被覆盖,甚至触发你遇到的Dictionary literal contains duplicate keys致命错误。
用上面的方式构建请求头后,发送的请求就会和Postman中的一致,包含两个Authorization字段,不会再出现授权错误。
内容的提问来源于stack exchange,提问作者Adeel Miraj
相关产品推荐
相关产品推荐

