Unity C# 网络学习(七)——HTTP(一)
一.HTTP类
HttpWebRequest
HttpWebRequest httpWebRequest = WebRequest.CreateHttp(new Uri("http://127.0.0.1"));
httpWebRequest.Abort();
httpWebRequest.GetRequestStream();
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
httpWebRequest.Credentials = new NetworkCredential("", "");
httpWebRequest.PreAuthenticate = true;
long len = httpWebRequest.ContentLength;
string contentType = httpWebRequest.ContentType;
HttpWebResponse
httpWebResponse.Close();
httpWebResponse.GetResponseStream();
long l = httpWebResponse.ContentLength;
var type = httpWebResponse.ContentType;
var statusCode = httpWebResponse.StatusCode;
var sd = httpWebResponse.StatusDescription;
二.HTTP下载
1.检测资源可用性
try
{
HttpWebRequest httpWebRequest =
WebRequest.CreateHttp(new Uri("http://192.168.1.103:8080/Http_Server/新建 Microsoft Word 文档 (1).docx"));
httpWebRequest.Method = WebRequestMethods.Http.Head;
httpWebRequest.Timeout = 2000;
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
if (httpWebResponse == null)
return;
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
{
Debug.Log("文件存在且可用");
Debug.Log(httpWebResponse.ContentLength);
Debug.Log(httpWebResponse.ContentType);
}
else
{
Debug.Log("文件不能用:" + httpWebResponse.StatusCode);
}
httpWebResponse.Close();
}
catch (WebException we)
{
Debug.Log(we);
return;
}
2.下载资源
HttpWebRequest httpWebRequest1 = WebRequest.CreateHttp(new Uri("http://192.168.1.103:8080/Http_Server/新建 Microsoft Word 文档 (1).docx"));
httpWebRequest1.Method = WebRequestMethods.Http.Get;
httpWebRequest1.Timeout = 3000;
HttpWebResponse httpWebResponse1 = httpWebRequest1.GetResponse() as HttpWebResponse;
if (httpWebResponse1 == null)
return;
if (httpWebResponse1.StatusCode == HttpStatusCode.OK)
{
Debug.Log(Application.persistentDataPath);
using (FileStream fs = new FileStream(Application.persistentDataPath +"/zzs.docx",FileMode.Create))
{
byte[] buffer = new byte[10240];
Stream s = httpWebResponse1.GetResponseStream();
if (s == null)
return;
int len = s.Read(buffer, 0, buffer.Length);
while (len>0)
{
fs.Write(buffer,0,len);
len = s.Read(buffer, 0, buffer.Length);
}
s.Close();
}
}
httpWebResponse1.Close();
Debug.Log("下载完成!");
}
catch (WebException we)
{
Debug.Log(we);
return;
}
三.HTTP下载封装
public class HTTPMgr
{
public static HTTPMgr Instance {
get; } = new HTTPMgr();
private const string RootPath = "http://192.168.1.103:8080/Http_Server/";
public async void DownLoad(string fileName, string outPath, Action<HttpStatusCode> action)
{
HttpStatusCode code = HttpStatusCode.OK;
await Task.Run(() =>
{
try
{
HttpWebRequest httpWebRequest = WebRequest.CreateHttp(new Uri(RootPath + fileName));
httpWebRequest.Method = WebRequestMethods.Http.Head;
httpWebRequest.Timeout = 2000;
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
if (httpWebResponse == null)
{
code = HttpStatusCode.InternalServerError;
return;
}
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
{
httpWebRequest = WebRequest.CreateHttp(new Uri(RootPath + fileName));
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Timeout = 3000;
httpWebResponse.Close();
httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
if (httpWebResponse == null)
{
code = HttpStatusCode.InternalServerError;
return;
}
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
{
Stream s = httpWebResponse.GetResponseStream();
if (s == null)
{
code = HttpStatusCode.InternalServerError;
return;
}
using (FileStream fs = new FileStream(outPath, FileMode.Create))
{
byte[] buffer = new byte[10240];
int len = s.Read(buffer, 0, buffer.Length);
while (len > 0)
{
fs.Write(buffer, 0, len);
len = s.Read(buffer, 0, buffer.Length);
}
}
s.Close();
code = HttpStatusCode.OK;
}
else
{
code = httpWebResponse.StatusCode;
}
}
else
{
code = httpWebResponse.StatusCode;
}
httpWebResponse.Close();
}
catch (WebException we)
{
code = HttpStatusCode.InternalServerError;
Debug.Log(we);
}
});
action?.Invoke(code);
}
}