Unity中HTTP访问和下载

259 阅读2分钟

##前言 访问中需要用到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访问和下载实现,希望能对大家有所帮助。