在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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM