You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:57:29