天天看點

在Unity3D中使用json作為post資料

  1. 問題描述

    用U3d的UnityWebRequest類Post資料時,服務端傳回報錯資訊:"Solve request fail. Post data format problem."而使用python腳本模拟Post時卻不會報錯,正常傳回結果。

  2. 問題定位

    首先,U3d和服務端是能正常通信的,傳回的報錯資訊是來自伺服器程式的傳回json中的errorinfo。用fillder檢視從u3d通路和python腳本通路的差別,發現Content-Type的類型不同。

    u3d中的WWWForm預設使用了"application/x-www-form-urlencoded",而python腳本的沒有定義,且python腳本中是把資料組織成json格式發送的。

  3. 問題原因

    http協定中的請求頭中的Content-Type是用來定義消息體裡的資料是怎麼編碼的。

    application/x-www-form-urlencoded: 序列化資料,以“鍵值對”用&連接配接鍵的方式。

    application/json: 消息體中資料以json的格式編碼

    multipart/form-data: 用二進制傳輸,有分隔符

    text/plain: 純文字傳輸

  4. 解決方法
//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/