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