• 在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/
  • 相关阅读:
    HDU 1850 Being a Good Boy in Spring Festival
    UESTC 1080 空心矩阵
    HDU 2491 Priest John's Busiest Day
    UVALive 6181
    ZOJ 2674 Strange Limit
    UVA 12532 Interval Product
    UESTC 1237 质因子分解
    UESTC 1014 Shot
    xe5 android listbox的 TMetropolisUIListBoxItem
    xe5 android tts(Text To Speech)
  • 原文地址:https://www.cnblogs.com/stan-si/p/15190429.html
Copyright © 2020-2023  润新知