Подтвердить что ты не робот

Как использовать Alamofire с настраиваемыми заголовками для запроса POST

Я выполнил запрос POST с Alamofire с настраиваемым заголовком, потому что мы работаем с OAuth2, и мы должны отправить токен доступа в каждый запрос внутри заголовка. В этом случае я должен использовать пользовательский заголовок.

Значение токена доступа для поля заголовка HTTP Authorization не работает для меня. Сервер генерирует ошибку, поскольку информация заголовка для OAuth с токеном доступа недоступна.

Но какова ошибка в моем коде?

Вот мой текущий код:

let URL =  NSURL(string: url + "/server/rest/action")
var mutableURLRequest = NSMutableURLRequest(URL: URL!)
mutableURLRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")

//this method does not work anymore because it returns an error in the response
//Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Bearer \(accessToken)"]

Alamofire.Manager.sharedInstance
    .request(.POST, mutableURLRequest, parameters: parameters, encoding: .JSON)
    .validate()
    .responseJSON {
                (request, response, data, error) -> Void in

                NSLog("REQUEST: \(request)")
                NSLog("RESPONSE: \(response)")
                NSLog("DATA: \(data)")
                NSLog("ERROR: \(error)")
    }
4b9b3361

Ответ 1

Вот пример того, как я использую его с пользовательскими заголовками:

    var manager = Manager.sharedInstance
    // Specifying the Headers we need
    manager.session.configuration.HTTPAdditionalHeaders = [
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "application/vnd.lichess.v1+json",
        "X-Requested-With": "XMLHttpRequest",
        "User-Agent": "iMchess"
    ]

Теперь, когда вы делаете запрос, он будет использовать указанные заголовки.

Ваш код реорганизован: не забудьте import Alamofire

    let aManager = Manager.sharedInstance
    manager.session.configuration.HTTPAdditionalHeaders = [
        "Authorization": "Bearer \(accessToken)" ]

    let URL =  url + "/server/rest/action"

    request(.POST, URL, encoding: .JSON)
        .responseJSON {
            (request, response, data, error) -> Void in

            println("REQUEST: \(request)")
            println("RESPONSE: \(response)")
            println("DATA: \(data)")
            println("ERROR: \(error)")
    }

Это подпись запроса request(method: Method, URLString: URLStringConvertible>, parameters: [String : AnyObject]?, encoding: ParameterEncoding)

Как вы можете видеть, вам не нужно передавать NSURL, просто строку URL, Alamofire позаботится об остальном.

Ответ 2

Существует простое решение для отправки параметров и заголовка с одним запросом Alamofire для Swift 3 и Alamofire 4.0

    let url = "myURL"
    let parameters: Parameters = [
        "param1": "hello",
        "param2": "world"
    ]
    let headers = [
        "x-access-token": "myToken",
    ]

    Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        if response.result.isFailure {
            //In case of failure
        }else {
            //in case of success
        }
    }