简单粗暴直接上代码,该脚本可直接挂载到任何一个物体上:
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