Unity HTTP Post 发送数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40229737/article/details/99631825

简单粗暴直接上代码,该脚本可直接挂载到任何一个物体上:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System;
using UnityEngine;
public class ReadJsondata : MonoBehaviour {

    HttpWebRequest request;// 声明一个HttpWebRequest请求
    Stream reqstream;//获取一个请求流
    HttpWebResponse response; //接收返回来的数据
    Stream streamReceive;//获取响应流

    string json;
    string JsonPath;
    private void Awake()
    {

        SendDataToService();
    }

 

    //发送数据到服务器
    public void SendDataToService()
    {
        string  urlstr = "协商好的Url地址"+json;//json字符串格式必须要对

        string recive = GetResponseData(json, urlstr);
        Debug.LogError(recive.ToString());

    }
  


    public string GetResponseData(string JSONData, string Url)
    {
        try
        {
            byte[] bytes = Encoding.UTF8.GetBytes(JSONData);////将参数字符串转换成字节数组。
                                                            /* HttpWebRequest*/
            request = (HttpWebRequest)WebRequest.Create(Url);// 声明一个HttpWebRequest请求
            request.Method = "POST";///设置请求模式
            request.KeepAlive = true;
            request.ContentLength = bytes.Length;////设置请求内容大小,当然就设置成我们的参数字节数据大小。
            request.ContentType = "application/x-www-form-urlencoded";//设置ContntType("application/json;charset=UTF-8") ,这句很重要,否则无法传递参数ContntType(""text/xml")
                                                                      /* Stream*/
            reqstream = request.GetRequestStream();//  //发送post的请求,获取请求流
            reqstream.Write(bytes, 0, bytes.Length);// 将参数字节数组写入到请求流里
            reqstream.Close();
            request.Timeout = 90000; //设置连接超时时间
            request.Headers.Set("paramaters", "no-cache");//paramaters就是服务接口函数的参数名

            //接收返回来的数据
            /*HttpWebResponse*/
            response = (HttpWebResponse)request.GetResponse(); //执行请求,获取响应对象
                                                               /* Stream*/
            streamReceive = response.GetResponseStream();//获取响应流
            Encoding encoding = Encoding.UTF8;
            StreamReader streamReader = new StreamReader(streamReceive, encoding);//创建流读取对象
            string strResult = streamReader.ReadToEnd();// 读取响应流
                                                        // response.Close();
                                                        //streamReceive.Dispose();////关闭响应流
            streamReceive.Close();
            streamReader.Dispose();

            return strResult;

        }

        catch (WebException e)
        {
            // return string.Empty;
            WebResponse wr = e.Response; using (StreamReader reader = new StreamReader(wr.GetResponseStream(), System.Text.Encoding.UTF8)) { string value = reader.ReadToEnd(); return "H" + value; }
        }
        finally
        {
            if (reqstream != null)
            {
                reqstream.Close();
            }
            if (streamReceive != null)
            {
                streamReceive.Close();
            }
            if (response != null)
            {
                response.Close();
            }
            //很多时候释放了Stream和Response还不够,客户端的Request还是在保持着,需要等垃圾回收器来回收,所以一般很容易阻塞,导致请求发送不出去。加上这个就是让HttpWebRequest实例在不需要的时候及时释放资源。这样可以重复使用而不会阻塞。
            if (request != null)
            {
                request.Abort();
            }
        }

    }
}

详细知识可参考下列文章:

https://blog.csdn.net/jonk_ren/article/details/78780925
https://bbs.csdn.net/topics/392254506

https://www.jianshu.com/p/de40aa165067

https://www.cnblogs.com/armyfai/p/3911741.html

https://blog.csdn.net/weixin_34406061/article/details/86020913

https://blog.csdn.net/weixin_41556165/article/details/83626015

猜你喜欢

转载自blog.csdn.net/qq_40229737/article/details/99631825