zoukankan      html  css  js  c++  java
  • 在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/
  • 相关阅读:
    libevent(十)bufferevent 2
    libevent(九)bufferevent
    maven本地库更新失败
    IDEA常用快捷键
    ELASTIC SEARCH 安装
    Hbase建模选择
    ElasticSearch关键概念
    Nginx+tomcat 负载均衡
    MapReduce (MRV1)设计理念与基本架构
    Kafka安装验证及其注意
  • 原文地址:https://www.cnblogs.com/stan-si/p/15190429.html
Copyright © 2011-2022 走看看