Я хочу использовать Alamofire для получения токена-носителя из веб-API, но я новичок в ios и alamofire. Как я могу этого добиться с помощью Alamofire?

func executeURLEncodedRequest(url: URL, model: [String : String]?, handler: RequestHandlerProtocol) {
    addAuthorizationHeader()
    Alamofire.request(.POST,createUrl(url), parameters: model, headers: headers,encoding:.Json)
}
21
Mario Dennis 12 Май 2016 в 08:19

3 ответа

Лучший ответ

Что ж, вам действительно не нужен Alamofire для этого (это можно просто сделать с помощью простого NSURLRequest), но вот что:

let headers = [
    "Content-Type": "application/x-www-form-urlencoded"
]
let parameters = [
    "myParameter": "value"
]
let url = NSURL(string: "https://something.com")!
Alamofire.request(.POST, url, parameters: parameters, headers: headers, encoding: .URLEncodedInURL).response { request, response, data, error in
    print(request)
    print(response)
    print(data)
    print(error)
}

Я думаю, что заголовки можно опустить, поскольку alamofire добавит соответствующий заголовок Content-Type. Сообщите мне, если это сработает.

Вы также можете найти тонну спецификации с примерами здесь.

32
Majster 10 Авг 2016 в 08:53

Alamofire 4.7.3 и Swift 4.0 и выше

Согласно документации для запроса POST с параметрами в кодировке URL

let parameters: Parameters = [
    "foo": "bar", 
    "val": 1 
]

// All three of these calls are equivalent
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters, encoding: URLEncoding.default)
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters, encoding: URLEncoding.httpBody)

// HTTP body: foo=bar&val=1

Аламофайр 5.2

let parameters: [String: [String]] = [
    "foo": ["bar"],
    "baz": ["a", "b"],
    "qux": ["x", "y", "z"]
]

// All three of these calls are equivalent
AF.request("https://httpbin.org/post", method: .post, parameters: parameters)
AF.request("https://httpbin.org/post", method: .post, parameters: parameters, encoder: URLEncodedFormParameterEncoder.default)
AF.request("https://httpbin.org/post", method: .post, parameters: parameters, encoder: URLEncodedFormParameterEncoder(destination: .httpBody))

// HTTP body: "qux[]=x&qux[]=y&qux[]=z&baz[]=a&baz[]=b&foo[]=bar"
14
Suhit Patil 25 Авг 2020 в 06:00

Вот пример кода, который должен работать с Alamofire 4.x и Swift 3.x по состоянию на август 2017 года:

let parameters = [
  "myParameter": "value"
]
Alamofire.request("https://something.com", method: .post, parameters: parameters, encoding: URLEncoding()).response { response in
  print(response.request)
  print(response.response)
  print(response.data)
  print(response.error)
}

Нет необходимости явно устанавливать заголовок типа содержимого, так как он устанавливается Alamofire автоматически.

11
Max Desiatov 23 Авг 2017 в 13:38