어떤 문제?
프로젝트에서 사용하고 있는 유니티 에디터 버전: 2020.3.42f1
//ex_WWW는 UnityWebRequest객체
ex_WWW = UnityWebRequest.Post(ex_URL, data); //data는 json을 string으로 변환한 것
ex_WWW.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
ex_WWW.SetRequestHeader("Content-Type", "application/json");
위처럼, UnityWebRequest.Post를 사용해서 string형식의 json을 바로 보내려고 시도하면 이론상 정상적으로 보내져야 하지만, 현재 제대로 보내지지 않습니다
패킷을 확인해보아도 JSON이 아닌, Line-based text data로 인식되고 있습니다.
유니티 포럼
UnityWebRequest.Post(url, jsonData) sending broken Json
I'm doing the following: (Don't worry it will be over HTTPS) UnityWebRequest.Post(url,jsonData) The json data is as follows: {"username":"some...
forum.unity.com
유니티에 재직중인 개발자의 과거 발언에 따르면,
UnityWebRequest.Post(string,string)에서 2번째 인자로 넘겨주는 내가 보내고자하는 string데이터는 application/x-www-form-urlencoded라고 가정하고 처리가 되는 것 같습니다.
따라서 UnityWebRequest.Post를 이용한 json 전송은 지양해야할 것 같습니다.
그럼 json을 어떻게 Post?
따라서, 의도대로 string 형태의 json을 보내고 싶다면
0. UnityWebRequest를 생성해주면서 method를 Post로 설정해줍니다.
ex_WWW = new UnityWebRequest(ex_URL, "POST");
1. string 형식의 json을 (여기선 data) utf8로 인코딩한 후 byte배열로 얻습니다.
byte[] jsonToSend = System.Text.UTF8Encoding().GetBytes(data);
2. UploadHandlerRaw를 통해서 앞서 얻은 byte배열을 uploadHandler에 집어넣어 줍니다.
ex_WWW.uploadHandler = new UploadHandlerRaw(jsonToSend);
3. 서버로부터 응답정보를 얻기 위해서 downloadHandler를 설정해줍니다.
ex_WWW.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
4. RequestHeader를 json으로 설정해줍니다.(서버에서 json이라고 인식할수있게)
ex_WWW.SetRequestHeader("Content-Type", "application/json");
'유니티' 카테고리의 다른 글
[Unity] PlayerPrefs을 활용한 데이터 저장 (0) | 2023.03.04 |
---|---|
[Unity] UI에서 블로커 구현하기 (0) | 2023.02.19 |
[Unity] 현재 애니메이터의 상태(state), 파라미터 값 아는 방법 (0) | 2023.02.18 |
[Unity] 헤더추가로 인스펙터 깔끔하게 정리하기! (0) | 2023.02.18 |
[Unity] 애니메이션 이벤트 (0) | 2023.02.18 |