Unity通过HTTP协议与服务端通信POST方式

工作中遇到仅在此做记录,若对谁有帮助则不甚荣幸
1、C#中的HttpWebRequest
2、www
3、UintyWebRequest
其中www已经被官方抛弃了,好像是下载assetbundle时内存占用太高问题,接下来说说UintyWebRequest。
此处贴上官方的API:

IEnumerator Upload() 
{
	 //开辟空间存放表单数据 
	 List formData = new List();
	  //添加表单数据 
	  formData.Add(new MultipartFormDataSection("string类型的数据"));
	  //或者添加文件数据 
	  formData.Add(new MultipartFormDataSection("my file data", "myfile.txt")); 
	  UnityWebRequest www = UnityWebRequest.Post("http://www.网页地址.com/myform", formData); 
	  yield return www.SendWebRequest();
	   //在旧版本中发送这样写
	    //yield return www.Send();
	  //   if (www.isError)       
	   //    {            
	//	        Debug.Log(www.error);         
	//       }         
   //       else        
   //       {             
     //        Debug.Log("form upload complete"); 
	 //       }
	if(www.isNetworkError || www.isHttpError) {
			Debug.Log(www.error);
		}
	else {
			Debug.Log("Form upload complete!");
		}
	}

以上的写法会自动附带header数据一起作为消息发送出去,而且去除不掉。
经过测试IMultipartFormSection是这个接口在作怪。然后我用了uploadHandler就完美解决了
以下是我的源码:

	UnityWebRequest www;
    IEnumerator Upload;

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            Upload = SendMessage(CreateJsonMes("****", ***, "****"));
            StartCoroutine(Upload);
        }
    }


    /// 
    /// 要发送的消息
    /// 
    /// 要发送的消息
    /// 
    IEnumerator SendMessage(string mes)
    {
        byte[] message = Encoding.UTF8.GetBytes(mes);
    
        //测试URL编码成功  
        //string urlCodeIP = WWW.EscapeURL("http://*************");
        //Debug.Log(IP); 
    
        //向客户发起post请求
        string IP = "http://*********";

        //用该方法发送不会附带header标头数据
        www = new UnityWebRequest(IP, "POST");
        www.uploadHandler = new UploadHandlerRaw(message);  
		//设置Header
        www.SetRequestHeader("Content-Type", "application/json");

        //确定此UnityWebRequest是否在其传出请求标头中包含Expect:100-Continue。(默认值:true)。
        www.useHttpContinue = false;
        yield return www.Send();

        //检测报错
        if (www.isError)
        {
            Debug.Log("报错");
            Debug.Log(www.error);
        }
        else
        {
            Debug.Log("form upload complete");

        }
        //如果正在进行中,请尽快停止UnityWebRequest。
        www.Abort();
        //停止协程
        StopCoroutine(Upload);
    }

    /// 
    /// 销毁时
    /// 
    private void OnDestroy()
    {
        //表示不再使用此UnityWebRequest,并应清除它正在使用的任何资源。
        www.Dispose();
    }

    #region 消息封装
    /// 
    /// 构造json格式的消息
    /// 
    /// cmd_name参数
    /// type参数
    /// param值
    /// 
    public string CreateJsonMes(string name, int type, string value)
    {
        JsonData body = new JsonData();
        JsonData mess = new JsonData();
        mess["value"] = value;

        JsonData messages = new JsonData();
        messages.SetJsonType(JsonType.Array);
       messages.Add(mess);

        JsonData cmd_param = new JsonData();
        cmd_param["type"] = type;
        cmd_param["param"] = messages;

        body["cmd_name"] = name;
        body["cmd_param"] = cmd_param;
        return body.ToJson();

    }
    #endregion
接下来附上学习json的链接

https://www.bilibili.com/video/av17222636?from=search&seid=7955883747783144103
http://www.sikiedu.com/course/129 ------------- 内附json小工具

你可能感兴趣的:(Unity)