我需要将自定义用户代理字符串设置为NSURLSession的sharedSession。即每当我拨打[NSURLSession sharedSession]
时,默认情况下它都会包含我的自定义配置,而且我不需要每次都设置它。
我可以将配置设置为session,
NSURLSession * session = [NSURLSession sharedSession];
NSString * userAgent = @"My String";
session.configuration.HTTPAdditionalHeaders = @{@"User-Agent": userAgent};
但是我找不到如何将配置设置为sharedSession
,可以在代码中随时使用。
答案 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。如果你觉得我的答案很有用,请把他的答案投票。