Я делаю приложение в Swift 4 i, когда дохожу до того, что мне нужно сделать POST-вызов, такой как «Базовая аутентификация доступа» с заголовком и телом с параметрами, у меня это не работает.
В основном я хочу смоделировать этот вызов, чтобы вернуть 200, но он возвращает меня:
"responseSerializationFailed (Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (ошибка
Domain = NSCocoaErrorDomain Code = 3840 "Недопустимое значение вокруг символа
0. "UserInfo = {NSDebugDescription = Недопустимое значение вокруг символа 0.}))"
URL-адрес API:
https://gist.github.com/juaniiton1/3a3e422ed99de22f3f3686bb3b7788d7
и раздел «Сохранить новую сделку в портфеле аутентифицированных пользователей».
Здесь я передаю код, имитирующий запрос «Сохранить новую сделку в портфеле авторизованных пользователей» с помощью Alamofire (4.7.3).
Следующие шаги следующие:
Что я делаю, так это кодирую данные "username" и "password", которые вы
дай мне в base64.
Затем я форматирую дату типа Stirng для типа Date (тип ISO).
После того, как я создал словарь для данных
И наконец я создал запрос, соединив все вышеперечисленное.
Кроме того, в Xcode у меня есть TransportSecurity, чтобы сделать
запрос "https"
Здесь я оставляю код:
Фонд импорта
импорт UIKit
импорт Alamofire
класс ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//URL
let url = URL(string: "https://test.cryptojet.io/coins/portfolio")!
// credentials encoded in base64
let username = "richard@rich.com"
let password = "secret"
let loginData = String(format: "%@:%@", username, password).data(using: String.Encoding.utf8)!
let base64LoginData = loginData.base64EncodedString()
let headers = ["Authorization" : "Basic \(base64LoginData)",
"Content-Type": "application/json"]
//Prepare date - Data UTC to ISO
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
let dataSting = "2016-06-05T16:56:57.019+01:00"
let dateISO = dateFormatter.date(from: dataSting)
//Prepare paramsBody -> tot Data
let paramsBody: [String: Any] = ["coin_id": 2,
"amount": -2.2183,
"price_usd": 675.982,
"traded_at": dateISO!]
//Request
Alamofire.request(url, method: .post,parameters: paramsBody, encoding: URLEncoding.default, headers: headers).responseJSON { response in
switch response.result {
case .success:
guard let json = response.result.value as? [String: Any],
let data = json["trade"] as? [String: Any] else {
return
}
print(data)
case .failure(let error):
print(error)
}
}
}
Не могли бы вы сказать, что я делаю не так с этим вызовом POST-аутентификации на сервере?