Unit打包WebGL---关于网络获取数据的问题

2 篇文章 0 订阅

使用System.Net.Http命名空间下的的HttpCline类在编辑器环境下是能获取数据的,但是在打包出来的WebGL版里是获取不到数据的。

  • 使用HttpCline获取的数据 在编辑器下有用,webGL没用。
    此模块为编辑器有用,webGL版没用
    /// <summary>
    /// 创建实验 httpclient
    /// </summary>
    public void PostStart()
    {
        HttpClient httpClient = new HttpClient();
        var postData = Newtonsoft.Json.JsonConvert.SerializeObject(new
        {
            SecretKey = "此模块为服务器对应SecretKey值",		//服务器管理给。
        }
        );
        HttpContent httpContent = new StringContent(postData);
        httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
        
        var result = httpClient.PostAsync("服务器IP" + "对应接口的URL", httpContent).Result;
        if (result.IsSuccessStatusCode)
        {
	        //获取过来的token,一套流程所需的一个验证身份 这边记录下来。
	        //Token_R类是对应的json解析的对象
            WindowsManager.Instance.Token = JsonUtility.FromJson<Token_R>(result.Content.ReadAsStringAsync().Result).Data;
        }
    } 

如果想要在Unity打包出来的WebGL中获取服务器数据的话,需要使用unity自带的UnityWebRequest类。

  • 使用UnityWebRequest获取数据,在编辑器下或WebGL下都可以获取
 /// <summary>
    /// 创建实验
    /// </summary>
    public void StartLab()
    {
        StartCoroutine(Upload());
    }
    /// <summary>
    /// 获取Token
    /// </summary>
    /// <returns></returns>
    IEnumerator Upload()
    {
        var postData = JsonConvert.SerializeObject(new
        {
            SecretKey = "此模块为服务器对应SecretKey值",
        }
         );
        byte[] body = Encoding.UTF8.GetBytes(postData);
        UnityWebRequest request = new UnityWebRequest("服务器IP" + "对应接口URL", "Post");
        request.uploadHandler = new UploadHandlerRaw(body);
        request.SetRequestHeader("Content-Type", "application/json;charset=utf-8");		//这里根据服务器所需来设置
        request.downloadHandler = new DownloadHandlerBuffer();

        yield return request.SendWebRequest();

        if (request.isDone)
        {
            string result = request.downloadHandler.text;
            //这边需要jsonconver类的反序列化json来获取对应的数据。
            Token = JsonConvert.DeserializeObject<Token_R>(result).Data;
            //response(result);
        }
        else
        {
            Debug.Log("Http 请求失败");
            Debug.Log(request.error);
        }
    }
    
[Serializable]
public class Token_R
{
    public bool IsSuccess;
    public string Message;
    public string Data;		//这个对应服务器接口的token数据
}

还有关于脚本中所使用的JsonConvert类是需要引用一个Newtonsoft.Json的程序集。这个程序集在unity的商店里可以下载,免费的。名字Json.net for unity 。导入这个插件不会使脚本报错。导入后的文件夹名字叫JsonDotNet。还有以上用的都是Post的方式。Get请求我用的是一个叫BestHttp的插件。大家可以百度下载使用。发布本篇博客是为了记录自己所遇到的坑,以后好用到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想要一个可以通过 HTTP/2 支持 REST、WebSocket、Socket.IO、SignalR、SignalR Core、Server-Sent Events(以及更多)的自定义请求并且具有开发者定期更新和出色支持功能的现成插件,那么 BestHTTP/2 就是你需要的! 您可以在其自己的演示面上试用该资源包,并阅读在线文档。 内含所有源代码! 支持的平台: - WebGL - iOS、Android - UWP、Windows、Mac OS X、Linux 最值得注意的功能是: - HTTP/2 - 自定义您的请求的所有部分: ◦ 方法(GET、HEAD、POST、PUT、DELETE、PATCH) ◦ 标头 ◦ Cookie ◦ 最大重定向计数 ◦ 超时 - 访问服务器发送的每个比特位: ◦ 标头 ◦ 状态代码 ◦ Cookie ◦ 原始内容 ◦ 尾部标头 - 连接和内存池 - 连接和请求超时 - 自动 Cookie 处理 - 支持众多代理(Fiddler、Charles 等) - 支持 HTTP 和 Socks 代理 - 自动缓存和缓存验证 - 设置缓存大小和新鲜度 - gzip 内容编码 - 基本和摘要式身份验证 - 多种格式类型(URL 编码和多部分/格式数据) - 自动重定向处理 - 上传和下载进度跟踪 - 下载时访问您的数据 - 您可以使用 Range 标头恢复下载 - HTTPS - 自定义各种全局设置: ◦ 每个服务器的最大连接数 ◦ 启用/禁用Cookie ◦ 隐私浏览模式 ◦ Cookie Jar 大小 ◦ 等等 WebSocket 功能: - 完全符合 RFC - 易于使用,“可行”的体验 - 支持扩展: ◦ WebSocket 的压缩扩展 (RFC7692) Socket.IO 功能: - 符合最新的(1.x 和 2.x)Socket.IO 实现 - 自动传输升级和降级 - 二进制数据的发送和接收 - 您可以插入自己喜欢的 Json 解码器 SignalR Core 功能: - 支持最新的 SignalR Core - 支持 MessagePack 编码 - 强类型回调 - 使用具有后备选项的最快的 Websocket 传输进行长轮询 - 程序包中包含基于标头的身份验证器 - 上传和下载串流 SignalR 功能: - 适用于最新的 SignalR 实现 - 易于使用的 API - 中心 - 支持身份验证 - 长时间运行的作业的进度消息 - 自动传输升级/降级 - 您可以插入自己喜欢的 Json 解码器 服务器发送事件功能: - 与最新规格兼容 - 易于使用的 API
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值