我是 Alamofire 的新手,所以我很抱歉,如果这是一个noob问题:此框架会自动存储Cookie ?< / p>
这是因为我有这样一个简单的请求:
def get_num_students(self):
print "There are %s students in this school." % (self.num_students)
此请求响应与cookie会话,我需要做出其他安全原因的请求;奇怪的是,像魔术一样,我已经可以在第一次POST之后执行其他请求,而无需手动读取cookie并存储它。我确定其他请求需要cookie会话,因为他们在postman上失败,例如但不在这里。
这只是一个功能?因为我在官方GitHub page上找不到任何相关内容。
答案 0 :(得分:47)
是的! Alamofire基本上是NSURLSession
的包装器。其经理通过调用NSURLSessionConfiguration
使用默认defaultSessionConfiguration()
。
正如其github页面在Advanced Usage部分中所述:
Alamofire建立在 NSURLSession 和基础URL加载系统之上。为了充分利用此框架,建议您熟悉底层网络堆栈的概念和功能。
在Manager部分下:
Alamofire.request等顶级便捷方法使用Alamofire.Manager的共享实例,该实例使用默认NSURLSessionConfiguration 进行配置。
defaultSessionConfiguration()
的{{3}}说:
默认会话配置使用基于磁盘的持久缓存(除非将结果下载到文件中),并将凭据存储在用户的钥匙串中。它还将Cookie (默认情况下)存储在与NSURLConnection和NSURLDownload类相同的共享Cookie存储区中。
答案 1 :(得分:0)
对于那些使用Moya并希望禁用存储的cookie的用户,请创建一个PluginType
(缺少X-CSRF-Token请求标头)
非常基本的示例:
public final class DisableCookiePlugin: PluginType {
public init() {
}
public func prepare(_ request: URLRequest, target: TargetType) -> URLRequest {
var mutableRequest = request
mutableRequest.httpShouldHandleCookies = false
return mutableRequest
}
}
然后使用它
MoyaProvider<Api>(
plugins: [
//NetworkLoggerPlugin(configuration: .init(logOptions: .verbose)),
DisableCookiePlugin()
]