如何在Swift应用程序中全局设置自定义标头?

时间:2015-08-11 16:18:24

标签: ios swift http-headers nsurlsession alamofire

所以我有一个应用程序,它经常向我们的API上的各个端点发出请求,并且每个请求几乎都有与之一起发送的相同自定义标头。我想知道是否有一种方法可以使用NSURLSessionConfiguration全局设置自定义标头,如果是这样的话...... Swift中的语法是什么,我会把它放在哪里? AppDelegate的?我做了一些搜索,似乎无法找到一个很好的例子。这是一种不好的做法吗?不可行吗?

编辑:

我正在使用Alamofire进行请求/响应,因此我需要一些全局设置它们,以便该库(以及碰巧使用NSURLSession的其他库)将默认发送标头。

1 个答案:

答案 0 :(得分:2)

我们已将此记录在README

var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
defaultHeaders["DNT"] = "1 (Do Not Track Enabled)"

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

let manager = Alamofire.Manager(configuration: configuration)

然后您需要使用新的manager而不是全局Alamofire单身。

manager.request(.GET, "https://httpbin.org/get")
       .responseJSON { _, _, result in
           debugPrint(result)
       }

这会将DNT标头附加到通过此manager实例发送的每个请求。

  

每个Manager实例都有自己的内部NSURLSession,它也有自己的配置。因此,此覆盖仅适用于此Manager实例。如果您在其他Manager实例上需要这些标头,则必须以相同的方式进行设置。