Unity中HTTP访问和下载
发表于2018-11-19
访问需要用到HTTPRequest组件,HTTPRequest发起HTTP请求,异步回调返回HTTPResponse。本篇就来给大家分享下在项目开发中HTTP访问和下载的实现。
发送Post表单
在unity中,www类虽然满足了很多需求但也失去了一部分自由,下面我们用C#实现发送post请求,传递表单,并获取或设置cookie。
private IEnumerator Login(string _url) { //设置链接 Uri url = new Uri(_url); //设置http请求 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); request.Method = "POST"; //表单数据 byte[] _data = Encoding.UTF8.GetBytes("account=" + "CarefreeQ" + "&password=" + "CarefreeQ"); //内容类型 request.ContentType = "application/x-www-form-urlencoded"; //内容长度 request.ContentLength = _data.Length; //设置cookie,如要获取则不能为空 request.CookieContainer = new CookieContainer(); //创建流 Stream stream = request.GetRequestStream(); //写入数据 stream.Write(_data, 0, _data.Length); stream.Close(); //开始接收响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //获取cookie string cookie = request.CookieContainer.GetCookieHeader(url); //接收流 stream = response.GetResponseStream(); //内容长度 int max = (int)response.ContentLength; int len = 0; //数据长度 _data = new byte[max]; while (len < max) { //写入响应数据 int _len = stream.Read(_data, len, _data.Length); len += _len; yield return new WaitForEndOfFrame(); } //读取数据 string text = Encoding.UTF8.GetString(_data); }
下载文件到本地
在Unity的开发中,我们经常会把资源保存到网上,比如一些网格,assetbundle,配置文件,贴图等等。我们希望在用户使用时下载到本地。
privateIEnumeratorDownload(string_url) { //设置保存路径 stringpath="自定义目录"; //这个方法可以新建一个线程运行,来提高效率和降低卡顿,这里就不写了 Uriurl=newUri(_url); //创建接受 WebRequestrequest=WebRequest.Create(url); //以下为接收响应的方法 WebResponseresponse=request.GetResponse(); //创建接收流 Streamstream=response.GetResponseStream(); //检查目录是否存在,不存在则创建 stringdir=path.Substring(0,path.LastIndexOf("/")); if(!Directory.Exists(dir)) Directory.CreateDirectory(dir); //文件写入路径 FileStreamfile=newFileStream(path,FileMode.OpenOrCreate,FileAccess.Write); //返回内容总长度 intmax=(int)response.ContentLength; intlen=0; while(len<max) { //byte容器 byte[]data=newbyte[10240000]; //循环读取 int_len=stream.Read(data,0,data.Length); //写入文件 file.Write(data,0,_len); len+=_len; //如果需要传递进度,可以这样算 //floatprogress=len/(float)max; yieldreturnnewWaitForEndOfFrame(); } //写入完后关闭文件流和接收流 file.Close(); stream.Close(); }
以上就是给大家分享的关于HTTP访问和下载实现,希望能对大家有所帮助。