Reference 👉👉 Unity Manual UnityWebRequest
Unity에서 HTTP 통신을 할 필요가 생겨 찾아보았다.
echo server
const express = require('express');
const port = 8000
const app = express();
app.use(express.json())
app.post('/', function(req, res) {
console.log(req.body)
res.send(req.body)
});
app.get('/', function(req, res) {
res.send({hello: "world"})
});
app.listen(port, '0.0.0.0', () => {
console.log(`Example app listening at http://0.0.0.0:${port}`)
})
테스트용 서버다. 데이터를 받으면 받은 것을 다시 보내주고, get을 호출하면 {“hello”:”world”}를 보내준다.
GET request
IEnumerator get()
{
Debug.Log("Call get");
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
Debug.Log("get request complete!");
}
}
}
POST request
IEnumerator post()
{
Debug.Log("Call post");
ls.Add("foo", "bar");
var jsonfile = JsonConvert.SerializeObject(ls);
using (UnityWebRequest www = new UnityWebRequest(url, "POST"))
{
www.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(jsonfile));
www.downloadHandler = new DownloadHandlerBuffer();
www.SetRequestHeader("Content-Type", "application/json");
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
}
else
{
Debug.Log(www.downloadHandler.text);
Debug.Log("post request complete!");
}
}
}
Web Request를 보낸 뒤 성공 여부를 받기 위해 코루틴을 사용한다.
www.downloadHandler = new DownloadHandlerBuffer();
...
Debug.Log(www.downloadHandler.text);
POST의 경우 downloadHandler가 있어야 서버에서 보내준 것을 받아올 수 있었기 때문에 별도로 만들어 주었지만, GET의 경우에는 별도로 생성할 필요가 없었다.
using UnityEngine.Networking;
using Newtonsoft.Json;
using System.Text;
위와 같은 namespace를 사용하였다.