Я пытаюсь выполнить простой http-запрос с swift на сервер nodejs.Когда я запускаю следующий код, тело кажется пустым.Я попробовал несколько вариантов, но безуспешно.
КЛИЕНТ: SWIFT 5.
func api_post(){
struct User: Codable {
let username: String
let password: String
}
let user = User(username: "ausername",password: "apassword")
guard let uploadData = try? JSONEncoder().encode(user) else {
return
}
let session = URLSession.shared
let url = URL(string: "http://XXX.XXX.XXX.XXX:XXXX/post")
var request = URLRequest(url: url!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.httpBody = uploadData
let task = session.uploadTask(with: request, from: uploadData) { data, response, error in
if let error = error {
print ("ERROR: \(error)")
return
}
guard let response = response as? HTTPURLResponse,
(200...299).contains(response.statusCode) else {
print ("SERVER ERROR")
return
}
if let mimeType = response.mimeType,
mimeType == "application/json",
let data = data,
let dataString = String(data: data, encoding: .utf8) {
print ("RETURNED DATA: \(dataString)")
}
}
task.resume()
}
Результат:
POST!
{}
CURL в тот же URL-адрес работает, как ожидалось:
curl -d "username=ausername&password=apassword" -X POST http://XXX.XXX.XXX.XXX:XXX/post
Результат:
FROM SERVER: POST RESPONSE [OK]
СЕРВЕР: NodeJs и ExpressJ.
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
const port = XXXX
app.use(bodyParser.urlencoded({ extended: false }))
app.post('/post', function (req, res) {
console.log("POST!");
var data = JSON.stringify(req.body,null,2);
console.log(data)
res.send ("FROM SERVER: POST RESPONSE [OK]");
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
Я скопировал и вставил из документации Swift, но она не работает должным образом.Я подозреваю код моего сервера, но curl работает.Поэтому я не уверен, в чем проблема.
Спасибо!