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