authentication的http请求迅速Alamofire

我正在努力争取这个工作来向我的API发出请求。 没有一个令牌的作品,但是当我尝试添加额外的标题,事情变得复杂,对我来说。

首先,结构。 一个叫做: APIAsyncTask的类使请求

一个叫做APIParams的类,只是一个将参数发送给APIAsyncTask类的数据持有者。

一个名为DatabaseAPI的类使得构build参数并将其发送到APIAsyncTask类。

DatabaseAPI

func someMethod() { let task = APIAsyncTasks() task.registerCallback { (error, result) -> Void in print("Finished task, back at DatabaseAPI") } let params2 = APIParams(request: .GET, apiPath: "Posts/1", apiToken: "4iTX-56w") task.APIrequest(params2) } 

APIAsyncTask

这部分是为了修复另一个错误,因为经理不是全球性的,任务被迅速取消。

 var manager : Manager! init(authenticatedRequest : Bool, token: String?) { manager = Alamofire.Manager() print("Pre \(manager.session.configuration.HTTPAdditionalHeaders?.count)") if(authenticatedRequest && token != nil) { var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders! defaultHeaders["Authorization"] = "bearer \(token)" let configuration = Manager.sharedInstance.session.configuration configuration.HTTPAdditionalHeaders = defaultHeaders manager = Alamofire.Manager(configuration: configuration) } print("Post \(manager.session.configuration.HTTPAdditionalHeaders?.count)") } 

经过一番决策后,归结到这一部分。

  private func GetRequest(url: String!,token : String?, completionHandler: (JSON?, NSURLRequest?, NSHTTPURLResponse?, NSError?) -> () ) -> () { print("Begin Get Request") if(token != nil)//if token is not nil, make authenticated request { print("just before request: \(manager.session.configuration.HTTPAdditionalHeaders?.count)") manager.request(.GET, url, parameters: nil, encoding: .JSON).responseJSON { (request, response, json, error) in print("Get Request (authenticated), inside alamofire request") var resultJson : JSON? if(json != nil) { resultJson = JSON(json!) } completionHandler(resultJson, request, response, error) } } else { //working part without token 

所以现在的代码,我完成时出现错误:

运行时错误

Mattt自己给出了使用Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders 的答案 ,所以应该没事的…

根据这个博客,我怀疑它与多个线程有关。 或者,因为这是关于CFNetwork,可能是因为我的API不使用SSL? 我禁用NSAppTransportSecurity

我是一个新的迅速,所以例子将非常感激! 谢谢!

所以你的大部分代码看起来很稳固。

这个错误使我相信CFNetwork在计算如何计算挑战的保护空间方面存在困难。 我也假设你正在接受一个基本的authentication挑战,因为你正在附加一个Authorization头。

仔细考虑一下你的逻辑,让我看到你没有把你的tokenAuthorization头里面的string。 您需要执行以下操作。

 defaultHeaders["Authorization"] = "bearer \(token!)" 

否则,您的Authorization标题值将包括Optional(value)而不是仅value

这是我目前唯一可以看到的问题。 如果你可以给一个尝试和评论回来,这将是伟大的。 我会相应地更新我的答案,如果这实际上不能解决您的问题。

祝你好运!

您可以使用Alamofire 2Swift 2在请求中添加标题。

举一个例子: 去例子