App Transport Security (ATS)
Вы звоните по URL-адресу http, а не по URL-адресу https. В производстве всегда следует использовать https. Это обеспечивается iOS.
Для целей тестирования можно объявить исключения в info.plist, документацию можно найти здесь:
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW33
JSON-кодирование / декодирование
В Swift есть удобный способ кодирования / декодирования JSON с помощью JSONEncode / JSONDecoder. Простое решение может выглядеть так, как показано ниже.
Определение структур параметров
struct Login: Encodable {
let user: User
}
struct User: Encodable {
let email: String
let password: String
}
Определение структуры возврата
struct Result: Decodable {
//add expected JSON fields here
}
Отдых Звоните
private func makeRestCall() {
let login = Login(user: User(email: "admin.test@stf.com", password: "password"))
guard let loginJson = try? JSONEncoder().encode(login) else { return }
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
guard let url = URL(string: "<add some valid url here>") else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = loginJson
let dataTask = session.dataTask(with: request) { (data, response, error) in
if let response = response as? HTTPURLResponse {
if response.statusCode == 200 {
guard let data = data else {
print ("call failed - no data returned")
return
}
guard let result = try? JSONDecoder().decode(Result.self, from: data) else {
print ("json decoding failed")
return
}
print ("call succesfully returned \(result)")
} else {
print ("call failed with status \(response.statusCode)")
}
} else {
print ("call failed: no http response")
}
}
dataTask.resume()
}
Регистрация в HTTPS-прокси
Чтобы убедиться, что вы отправляете правильные данные, вы можете использовать прокси-программу HTTPS. Там это будет выглядеть так:
![check in proxy](https://i.stack.imgur.com/PoQH6.png)