UnityWebRequest提供了一套标准的系统模块,来完成Http请求和Http响应,它的基本目标就是满足unity游戏与web后端服务的交互。它另外还支持一些http高级的功能,比如chunked http请求。(数据分块传输),流式 POST/PUT操作,以及操作Http包头和其它的http行为,比如delete,get等。
UnityWebRequest主要有两部分组成:
- 高级API(HLAPI High Level API): 它封装了低级API的接口,提供的接口,使用起来更加友好和方便。
- 低级API(LLAPI Low Level API) : 它为高级使用者提供了最大程度的灵活性。
UnityWebRequest支持的平台:
- 所有的Unity Editor平台和所有的独立运行的应用
- WebGL
- 移动平台:IOS,Android
- 通用的Window平台
- PS4和PSVita
- XboxOne
- Nintendo Switch
UnityWebRequest 系统的结构
它将一个Http请求的事务分解成了三个不同的操作:
- 向服务端提供数据
- 从服务端获取数据
- Http流控制(比如重定向,错误捕获等)
为了向高级用户提供友好方便的接口支持,这些操作被封装到各自所属的对象里面:
- UploadHandler 负责向服务端发送数据
- DownloadHandler 负责接收,缓存和处理从服务器接收的数据
- UnityWebRequest 负责管理其它的两个对象,并且实现Http流的控制操作。在这个对象中,可以自定义Headers信息,URLs,以及存储错误和重定向信息。
如下图所示:
使用UnityWebRequest,对于任何一个Http请求事务,通常的代码流程是这样的:
- 创建一个Web请求对象
- 配置Web请求对象:设置自定义的Headers,设置Http行为比如GET,POST,HEADER (注意,自定义行为除了安卓平台,其它平台都支持),然后设置请求的URL。
- (操作)创建一个Upload Handler 并且和Web Request绑定:提供请求的参数数据,或者提供要提交的表单数据
- (操作)创建一个Download Handler并且和Web Request绑定
- 发送Web Request,如果是在一个协程中,你需要yield Send()方法的结果,然后等待请求的完成
- (操作)读取从Download Handler中接收的数据
- (操作)从UnityWebRequest对象中读取错误信息,Http状态码以及响应的包头信息。