Пустое тело запроса в swift - PullRequest
0 голосов
/ 29 сентября 2018

У меня проблемы с отправкой почтового запроса на мой API.И iphone, и мой компьютер находятся в одной сети, поэтому я получаю доступ к API локального публичного IP-адреса. В своем приложении я установил безопасность транспорта приложения, чтобы разрешить произвольные URL-адреса.Проблема в том, что тело всегда пусто.Я попытался создать локальный туннель, чтобы я мог получить к нему доступ через https, но тело остается пустым.

Вот мой звонок

import UIKit
import Alamofire

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let parameters: Parameters = [
            "foo": "bar",
            "baz": ["a", 1],
            "qux": [
                "x": 1,
                "y": 2,
                "z": 3
            ]
        ]
        let headers: HTTPHeaders = [
            "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
            "Accept": "application/json"
        ]
        Alamofire.request("my-url", method: .post, parameters: parameters, headers: headers  ).responseJSON { (response) in
            debugPrint(response.result)
        }            
    }


}

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 29 сентября 2018

Как именно вы получаете параметры в вашем API?

Если из тела запроса (т.е. не из строки запроса) вы также должны передать аргумент encoding в функцию запроса вашего Alamofire со значением JSONEncoding.default, потому что по умолчанию кодировка URLEncoding.defaultЭто означает, что параметры будут переданы в виде строки запроса.

Измените это:

Alamofire.request("my-url", method: .post, parameters: parameters, headers: headers).responseJSON { (response) in
    debugPrint(response.result)
}

Кому:

Alamofire.request("my-url", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
    debugPrint(response.result)
}

Из документа Аламофира

/// Creates a `DataRequest` using the default `SessionManager` to retrieve the contents of the specified `url`,
/// `method`, `parameters`, `encoding` and `headers`.
///
/// - parameter url:        The URL.
/// - parameter method:     The HTTP method. `.get` by default.
/// - parameter parameters: The parameters. `nil` by default.
/// - parameter encoding:   The parameter encoding. `URLEncoding.default` by default.
/// - parameter headers:    The HTTP headers. `nil` by default.
///
/// - returns: The created `DataRequest`.
@discardableResult
public func request(
    _ url: URLConvertible,
    method: HTTPMethod = .get,
    parameters: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> DataRequest
{
    return SessionManager.default.request(
        url,
        method: method,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}
...