-
問題描述
用U3d的UnityWebRequest類Post資料時,服務端傳回報錯資訊:"Solve request fail. Post data format problem."而使用python腳本模拟Post時卻不會報錯,正常傳回結果。
-
問題定位
首先,U3d和服務端是能正常通信的,傳回的報錯資訊是來自伺服器程式的傳回json中的errorinfo。用fillder檢視從u3d通路和python腳本通路的差別,發現Content-Type的類型不同。
u3d中的WWWForm預設使用了"application/x-www-form-urlencoded",而python腳本的沒有定義,且python腳本中是把資料組織成json格式發送的。
-
問題原因
http協定中的請求頭中的Content-Type是用來定義消息體裡的資料是怎麼編碼的。
application/x-www-form-urlencoded: 序列化資料,以“鍵值對”用&連接配接鍵的方式。
application/json: 消息體中資料以json的格式編碼
multipart/form-data: 用二進制傳輸,有分隔符
text/plain: 純文字傳輸
- 解決方法
//postParams是傳參的對象,通過對json字元串用UTF8編碼
byte[] postBytes= Encoding.UTF8.GetBytes(JsonUtility.ToJson(postParams));
UnityWebRequest uwr = new UnityWebRequest(url, "POST");
uwr.uploadHandler = new UploadHandlerRaw(postBytes);
uwr.downloadHandler = new DownloadHandlerBuffer();
//設定Content-Type類型
uwr.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
yield return uwr.SendWebRequest();
藍閃的部落格
http://www.cnblogs.com/stan-si/