Я пытаюсь сделать HTTP-запрос на сервер разработки с самоподписанным сертификатом. Эта функция делает POST вызов:iOS9 + Swift: как установить тело после запроса с использованием значения JSON?
func makeHTTPPostRequest(path: String, body: JSON, onCompletion: (JSON?, NSError?) -> Void) {
let request = NSMutableURLRequest(URL: NSURL(string: path)!)
request.HTTPMethod = "POST"
// I am using SwiftyJSON
do {
request.HTTPBody = try body.rawData()
} catch _ { }
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue:NSOperationQueue.mainQueue())
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
var json: JSON?
if let _data = data {
json = JSON(data: _data)
}
onCompletion(json, error)
})
task.resume()
}
Когда я делаю запрос POST, сервер возвращает меня «Пустые поля» ошибка, даже если я правильно установить HTTPBody запроса:
PS: Маршрут работает нормально, когда я вызываю его из Postman.
Из блока кода you'r я могу предположить, что вы пытаетесь отправить данные JSON. Вы должны попытаться преобразовать JSON в данные с помощью 'NSJSONSerialization.dataWithJSONObject' –
В SwiftyJSON 'JSON' является структурой. Я не могу использовать этот метод, потому что он ожидает AnyObject. Однако метод JSON.rawData() возвращает правильный объект данных. Я протестировал его, расшифровав результат. –
Не уверен, что возвращает 'rawData', но свойство' request.HTTPBody' должно быть объектом 'NSData'. В случае JSON объект данных должен содержать последовательность символов Unicode (предпочтительный UTF-8), который является вашим JSON - это ваше сериализованное представление JSON. Вы также должны соответствующим образом настроить заголовок 'Content-Type' (' application/json'). – CouchDeveloper