设置NSURLSession sharedSession的配置

时间:2014-12-05 09:39:34

标签: ios nsurlsession

我需要将自定义用户代理字符串设置为NSURLSession的sharedSession。即每当我拨打[NSURLSession sharedSession]时,默认情况下它都会包含我的自定义配置,而且我不需要每次都设置它。

我可以将配置设置为session,

NSURLSession * session = [NSURLSession sharedSession];
NSString * userAgent  = @"My String";
session.configuration.HTTPAdditionalHeaders = @{@"User-Agent": userAgent};

但是我找不到如何将配置设置为sharedSession,可以在代码中随时使用。

3 个答案:

答案 0 :(得分:14)

那是因为你无法修改sharedSession。想象一下,好像sharedSession是iOS设备sharedSession,并被所有其他应用程序和框架使用。有意义的是它不可配置吗?关于它的documentation声明:

  

共享会话使用当前设置的全局NSURLCache,   NSHTTPCookieStorage和NSURLCredentialStorage对象基于   在默认配置上。

您要做的是定义自定义配置,这意味着您将需要自己的会话对象及其自己的配置。这就是为什么有一个特定的构造函数给你你需要的东西:

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration
                                  delegate:(id<NSURLSessionDelegate>)delegate
                             delegateQueue:(NSOperationQueue *)queue

为简洁起见,您可以使用[NSURLSessionConfiguration defaultSessionConfiguration]创建基本配置,然后在那里设置其他标题。

当然,您将负责保留会话等

答案 1 :(得分:1)

我也遇到了这个问题,我不得不在httpHeaders中更改授权。 Daniel回答是对的,我们无法在设置后更改NSURLSession及其配置。解决方案是在NSMutableURLRequest对象中设置标头,如

var request = NSMutableURLRequest()
request.setValue("YourAccessToken", forHTTPHeaderField: "Authorization")

回答它可能有助于某人。

答案 2 :(得分:1)

根据@Daniel Galasko: 我添加了以下内容:(仅更新为swift 2.3代码)

let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let additionalHeadersDict = ["User-Agent": "User name that you want",
                             "Accept-Language":"lamguages",
                             "Accept-Encoding": "Encoding type" ]
sessionConfiguration.HTTPAdditionalHeaders = additionalHeadersDict

再次感谢@Daniel Galasko。如果你觉得我的答案很有用,请把他的答案投票。