UnityWebRequest

1.UnityWebRequest介绍

UnityWebRequest封装了网络请求,支持http、https、file、和匿名ftp协议的请求以及处理。

UnityWebRequest请求相关元素

  • UploadHandler 处理数据 将数据发送到服务器的对象
  • DownloadHandler 从服务器接收数据的对象
  • UnityWebRequest 负责 HTTP 通信流量控制来管理上面两个对象的对象。

一次HTTP请求,一般流程如下:

1. 创建一个UnityWebRequest对象

2. 配置UnityWebRequest对象

            2.1 设置headers

            2.2 设置HTTP请求方式(例如GET,POST,HEAD)

3.(可选)创建一个UploadHandler添加到这个UnityWebRequest对象上面

            3.1 提供上传的数据

            3.2 提供上传的HTTP表单

4.(可选)创建一个DownloadHandler添加到这个UnityWebRequest对象上面

5. 发送UnityWebRequest请求(UnityWebRequest在调用SendWebRequest()方法之后才会真正执行请求)

6.(可选)从DownloadHandler里面读取接收到的数据

7.(可选)从UnityWebRequest对象读取error信息、HTTP状态码、相应头等信息。

 

2.UnityWebRequest常用方法:

1. public void Abort();

  • 立刻停止当前正在运行的UnityWebRequest对象,UnityWebRequest error返回为true,error属性将为“User Aborted
  • 没有调用SendWeRequest的UnityWebRequest对象,将在调用Send后,立刻停止。
  • 已遇到错误或者完成通信的UnityWebRequest对象,此方法无效。

2. public static string EscapeURL(string s);

某些文本字符在URL中存在时具有特殊含义。 如果需要在URL参数中包含这些字符,则必须使用转义序列表示它们。 建议您在将文本作为URL参数传递之前,对用户提供的任何文本使用此函数。 这将确保恶意用户无法操纵URL的内容来攻击Web服务器。 我们也可以使用UnityWebRequest.UnEscapeURL来将URL转译回来。

3. Dispose() 释放UnityWebRequest对象和它正在使用的资源。

因为Unity给我们提供了disposeDownloadHandlerOnDispose和disposeUploadHandlerOnDispose两个bool类型属性。

他们的默认值是true,也就是我们不需要设置Unity就会自动在完成后调用Dispose()释放资源。

 

3.UnityWebRequest常用属性:

属性名称含义
url定义UnityWebRequest与之通信的目标URI。
tiimeout请求超过此值,终止请求
isHttpError错误的HTTP响应代码大于或等于400后返回true。 (只读)错误类型的服务器返回代码(例如404 / Not Found和500 / Internal Server Error)反映在isHttpError属性中,而不是isNetworkError属性中。
isNetworkError遇到系统错误后返回true,系统错误的示例包括无法解析DNS条目,套接字错误或超出重定向限制。 当此属性返回true时,error属性将包含描述错误的可读字符串。
downloadProgress

返回介于0.0和1.0之间的浮点值,指示从服务器下载正文数据的进度。

仅当服务器的响应包含Content-Length标头并且UnityWebRequest具有附加到downloadHandler属性的DownloadHandler时,此属性才有效。

如果UnityWebRequest已完成(成功或系统错误),则此属性将始终返回1.如果UnityWebRequest仍在与远程服务器通信,并且downloadHandler为null,则此属性将返回0.5。 如果尚未调用Send,则此属性将返回-1。

uploadProgress返回介于0.0和1.0之间的浮点值,指示将数据上载到服务器的进度。如果UnityWebRequest完成(成功或系统错误),则此属性将始终返回1.如果UnityWebRequest仍在与远程服务器通信,并且uploadHandler为null,则此属性将返回零。 如果尚未调用Send,则此属性将返回-1。
error

一个可读的字符串,描述此UnityWebRequest对象在处理HTTP请求或响应时遇到的任何系统错误。 (只读)

如果UnityWebRequest未遇到系统错误,则此属性将返回null。 系统错误的示例包括套接字错误,解析DNS条目的错误或超出的重定向限制。

注意:来自服务器的错误类型返回码(例如404 / File Not Found或500 / Internal Server Error)不被视为系统错误。默认值:null。

isDone

UnityWebRequest完成与远程服务器通信后返回true。 (只读)

当UnityWebRequest成功完成或遇到系统错误时,此属性将返回true。 DownloadHandler(如果有)的所有后期下载处理将在此属性返回true之前完成。

3.相关类:

DownloadHandler派生出以下类,附加到UnityWebRequest对象中,请求完成后,可直接把下载后的数据转化为Unity可用的Object对象。

例如下载音频: 

using (UnityWebRequest uwr = new UnityWebRequest(url))
        {
            DownloadHandlerAudioClip downloadAudioClip = new DownloadHandlerAudioClip(url, AudioType.WAV);
            uwr.downloadHandler = downloadAudioClip;
            yield return uwr.SendWebRequest();
            AudioClip audioClip = null;
            string text = null;
            if (!(uwr.isNetworkError || uwr.isHttpError))
            {
                audioClip = downloadAudioClip.audioClip;
            }
            else
            {
                text = uwr.error;
            }
            if (actionResult != null)
            {
                actionResult.Invoke((uwr.isNetworkError || uwr.isHttpError), text, audioClip);
            }
        }

Ps:

使用无BOM的UTF8编码的文件进行数据传递。

参考:

https://www.jianshu.com/p/8631ae7dd653

https://blog.csdn.net/qwe25878/article/details/85051911

https://docs.unity3d.com/560/Documentation/Manual/UnityWebRequest.html#UsingLLAPI

https://www.shijunzh.com/archives/1162

UnityWebRequestUnity中用于HTTP通信的类。它可以用于从Web服务器下载数据,也可以用于向Web服务器上传数据。UnityWebRequest 支持多种不同的数据类型,包括文本、图像、音频和视频等。它还支持各种不同的Web协议,包括HTTP、HTTPS和FTP等。 使用 UnityWebRequest,可以通过以下步骤进行HTTP通信: 1. 创建一个 UnityWebRequest 对象。 2. 设置 UnityWebRequest 对象的属性,例如URL、HTTP请求方法(GET、POST等)、Headers、上传数据等。 3. 发送 HTTP 请求。 4. 在接收到响应后,处理响应数据。可以根据需要将响应数据转换为文本、图像、音频或视频等。 以下是一个简单的示例,演示如何使用 UnityWebRequest 下载一个文本文件: ``` IEnumerator DownloadTextFile(string url) { UnityWebRequest www = UnityWebRequest.Get(url); yield return www.SendWebRequest(); if (www.result == UnityWebRequest.Result.Success) { string text = www.downloadHandler.text; Debug.Log("Downloaded text: " + text); } else { Debug.Log("Error downloading: " + www.error); } } ``` 在上面的示例中,我们首先创建了一个 UnityWebRequest 对象,并设置它的 URL。然后,我们使用 `yield return www.SendWebRequest()` 发送 HTTP 请求,并等待响应。在接收到响应后,我们检查 UnityWebRequest 的 `result` 属性,如果请求成功,我们获取响应数据并输出到控制台中。如果请求失败,我们输出错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值