Я борюсь за то, чтобы заставить это работать, чтобы сделать запрос к моему API. Без токенов работает, но когда я пытаюсь добавить дополнительные заголовки, для меня все осложняется.Аутентифицированный http-запрос swift Alamofire
Во-первых, структура. один класс под названием: APIAsyncTask, что делает запросы
один класс называется APIParams, просто держатель данных для отправки параметров в APIAsyncTask класса.
один класс, называемый DatabaseAPI, что делает, что строит параметры, и отправить его в 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 gives the answer использования Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders
, так что должно быть хорошо ...
Я подозреваю, что это связано с несколькими потоками, согласно блогу this. Или, поскольку это что-то о CFNetwork, это может быть из-за того, что мой API не использует SSL? Я отключен NSAppTransportSecurity
Я как бы новый, чтобы быстро, поэтому примеры были бы очень оценены! Спасибо!
Следует ли хранить ссылки на менеджера. Я не уверен, но вы могли бы это проверить. – Sandeep
Предлагаемые действия? Я не уверен, как я сделаю это слабым справки. – CularBytes