Я пытаюсь получить JSON, используя запрос HTTP Post с сервера, но я думаю, что тело моего запроса неверно.Я перепробовал все и не могу найти решение.Приложение аварийно завершает работу.
Я попытался использовать другой синтаксис в теле запроса (переменная newTodo), например:
'{"api_key": "mykey123", "api_secret": "asdfg", "uniqueid": "csd23cdse34ww", "password": "secret123", "pin": "12345"} '
и
["api_key": "mykey123", "api_secret": "asdfg", "uniqueid": "csd23cdse34ww", "password": "secret123", "pin": "12345"]
Использованиевыше у меня есть ошибка:
["api_key": "mykey123", "password": "flibble1", "uniqueid": "csd23cdse34ww", "api_secret": "secret123", ""pin ":" 12345 "] 2019-01-25 10: 00: 54.298086 + 0000 APPTEST [8863: 646933] [logging] таблица" users "уже существует Таблица" users "уже существует (код: 1).
ошибкапарсинг ответа от POST на / todos
Отлично работает на Postman с телом
'{"api_key": "mykey123", "api_secret": "asdfg","uniqueid": "csd23cdse34ww", "password": "secret123", "pin": "12345",} '
но Xcodeпросит меня использовать приведенный ниже синтаксис.
func loginPressed() {
let todosEndpoint: String = "https://mydevapi.com/authenticateuser"
guard let todosURL = URL(string: todosEndpoint) else {
print("Error: cannot create URL")
return
}
var todosUrlRequest = URLRequest(url: todosURL)
todosUrlRequest.httpMethod = "POST"
let newTodo = "{\"api_key\":\"mykey123\",\"api_secret\":\"asdfg\",\"uniqueid\":\"csd23cdse34ww\",\"password\":\"secret123\",\"pin\":\"12345\"}"
let jsonTodo: Data
do {
jsonTodo = try JSONSerialization.data(withJSONObject: newTodo, options: [])
todosUrlRequest.httpBody = jsonTodo
print(newTodo)
} catch {
print("Error: cannot create JSON from todo")
return
}
let session = URLSession.shared
let task = session.dataTask(with: todosUrlRequest) {
(data, response, error) in
guard error == nil else {
print("error calling POST on /todos/1")
print(error!)
return
}
guard let responseData = data else {
print("Error: did not receive data")
return
}
// parse the result as JSON, since that's what the API provides
do {
guard let receivedTodo = try JSONSerialization.jsonObject(with: responseData, options: []) as? [String: Any] else {
print("Could not get JSON from responseData as dictionary")
return
}
print(receivedTodo)
print("The todo is: " + receivedTodo.description)
guard let todoID = receivedTodo["id"] as? Int else {
print("Could not get todoID as int from JSON")
print(receivedTodo)
return
}
print("The ID is: \(todoID)")
print(receivedTodo)
} catch {
print("error parsing response from POST on /todos")
return
}
}
task.resume()
}
Приложение аварийно завершает работу - Поток 1: сигнал SIGABRT
2019-01-25 09: 37: 05.762339 + 0000 APPTEST [8601: 615340]* Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* + [NSJSONSerialization dataWithJSONObject: options: error:]: Неверный тип верхнего уровня в записи JSON» *** Первый стек вызова вызова: (0 CoreFoundation 0x00000001087f11bb исключениеPreprocess + 331 1 libobjc.A.dylib 0x000000010635f735 objc_exception_throw + 48 2 повышение CoreFoundation 0x00000001087f1015 + [повышение NSException: формат:$ S9Bibimoney15LoginControllerC12loginPressedyyF + 2718 5 APPTEST 0x000000010588f79c $ STA.7 + 28 6 APPTEST 0x00000001058924d4 $ S9Bibimoney9LoginViewC06handleB0yyF + 132 7 APPTEST 0x0000000105892534 $ S9Bibimoney9LoginViewC06handleB0yyFTo + 36 8 UIKitCore 0x000000010c876ecb - [UIApplication сendAction: to: from: forEvent:] + 83 9 UIKitCore 0x000000010c2b20bd - [UIControl sendAction: to: forEvent:] + 67 10 UIKitCore 0x000000010c2b23da - [UIControl _sendActionsForEvents: сEvent:] 0 0 0 00EIC: UIC: UIC: UIC: UIC: UE+ 583 12 UIKitCore 0x000000010c8b20a4 - [UIWindow _sendTouchesForEvent:] + 2729 13 UIKitCore 0x000000010c8b37a0 - [UIWindow SendEvent:] + 4080 14 UIKitCore 0x000000010c891394 - [UIApplication SendEvent:] + 352 15 UIKitCore 0x000000010c9665a9 __dispatchPreprocessedEventFromEventQueue + 3054 16 UIKitCore 0x000000010c9691cb __handleEventQueueInternal + 5948 17 CoreFoundation 0x0000000108756721__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 18 CoreFoundation 0x0000000108755f93 __CFRunLoopDoSources0 + 243 19 CoreFoundation 0x000000010875063f __CFRunLoopRun + 1263 20 CoreFoundation 0x000000010874fe11 CFRunLoopRunSpecific + 625 21 GraphicsServices 0x000000011047c1dd GSEventRunModal + 62 22 UIKitCore 0x000000010c87581d UIApplicationMain + 14023 APPTEST 0x0000000105896517 main + 71 24 libdyld.dylib 0x0000000108d93575 start + 1 25 ???0x0000000000000001 0x0 + 1) libc ++ abi.dylib: завершается с необработанным исключением типа NSException (lldb)
- Ожидаемый код состояния 200