UN4L3——HTTP关键类
UN4L3——HTTP关键类
Http相关通讯类的使用和Ftp非常类似,只有一些细节上的区别,之后我们在学习上传下载时再来着重讲解
本章代码关键字
1 | //发送客户端请求 |
HttpWebRequest
命名空间:System.Net
HttpWebRequest
是主要用于发送客户端请求的类
主要用于:发送HTTP客户端请求给服务器,可以进行消息通信、上传、下载等等操作
-
重要方法
-
Create()
:创建新的WebRequest
,用于进行HTTP相关操作虽然
HttpWebRequest
和FtpWebRequest
都使用继承自WebRequest
的Create()
方法来创建,
但是我们无需担心其创建的内容会有混淆,因为Create()
会根据传入的参数来判断创建哪种连接,
例如传入"http://..."
就会创建HttpWebRequest
1
HttpWebRequest httpWebRequest = HttpWebRequest.Create(new Uri("http://192.168.1.102/Http_Server")) as HttpWebRequest;
-
Abort()
:如果正在进行文件传输,用此方法可以终止传输1
httpWebRequest.Abort();
-
GetRequestStream()
:获取用于上传的流上传的具体逻辑看:UN4L5——HTTP上传数据
1
Stream stream = httpWebRequest.GetRequestStream();
-
GetResponse()
:返回HTTP服务器响应执行该方法会真正的从Http服务器获取响应
httpWebResponse
,执行逻辑,根据该响应可得到状态码确认状态是否成功1
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
-
BeginGetRequestStream()
/EndGetRequestStream()
:异步获取用于上传的流和Socket的TCP异步通信的使用方法类似,也是需要一个参数为
IAsyncResult
的回调函数,并传入执行回调函数要传入的内容1
2
3
4
5
6httpWebRequest.BeginGetRequestStream((result) =>
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
Stream s = request.EndGetRequestStream(result);
//..异步接收逻辑
}, httpWebRequest); -
BeginGetResponse()
/EndGetResponse()
:异步获取返回的HTTP服务器响应1
2
3
4
5
6httpWebRequest.BeginGetResponse((result) =>
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;
//..异步接收逻辑
}, httpWebRequest);
-
-
重要成员
-
Credentials
:通信凭证,设置为NetworkCredential对象对于需要凭证的,设置通信凭证同时还需要设置
PreAuthenticate
,确保通信凭证起作用1
2httpWebRequest.PreAuthenticate = true;
httpWebRequest.Credentials = new NetworkCredential("xxx", "******");-
PreAuthenticate
:是否随请求发送一个身份验证标头,一般需要进行身份验证时需要将其设置为true
1
httpWebRequest.PreAuthenticate = true;
-
-
Headers
:构成标头的名称/值对的集合1
httpWebRequest.Headers["Content-Type"] = "随便写的";
-
ContentLength
:发送信息的字节数 上传信息时需要先设置该内容长度1
httpWebRequest.ContentLength = 100;
-
ContentType
:在进行POST请求时,需要对发送的内容进行内容类型的设置上传消息时,根据消息的类型选择何种
ContentType
,以帮助服务器判断如何处理消息,
具体有哪些类型,可看:ContentType的常用类型1
2//如果上传的消息是键值对形式的字符串
httpWebRequest.ContentType = "application/x-www-form-unlencoded"; -
Method
:操作命令设置1
httpWebRequest.Method = "POST";
-
WebRequestMethods.Http
类中的操作命令属性-
Get
:获取请求,一般用于获取数据1
httpWebRequest.Method = WebRequestMethods.Http.Get;
-
Post
:提交请求,一般用于上传数据,同时可以获取1
httpWebRequest.Method = WebRequestMethods.Http.Post;
-
Head
:获取和Get
一致的内容,只是只会返回消息头,不会返回具体内容1
httpWebRequest.Method = WebRequestMethods.Http.Head;
-
Put
:向指定位置上传最新内容1
httpWebRequest.Method = WebRequestMethods.Http.Put;
-
Connect
:表示与代理一起使用的 HTTP CONNECT 协议方法,该代理可以动态切换到隧道1
httpWebRequest.Method = WebRequestMethods.Http.Connect;
-
MkCol
:请求在请求 URI(统一资源标识符)指定的位置新建集合1
httpWebRequest.Method = WebRequestMethods.Http.MkCol;
-
-
-
Timeout
:设置请求的超时时间1
httpWebRequest.Timeout = 2000;
-
HttpWebResponse
命名空间:System.Net
它主要用于获取服务器反馈信息的类
我们可以通过HttpWebRequest
对象中的GetResponse()
方法获取
当使用完毕时,要使用Close
释放
1 | HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; |
-
重要方法:
-
Close()
:释放所有资源1
httpWebResponse.Close();
-
GetResponseStream()
:返回从FTP服务器下载数据的流具体下载的逻辑实现看:UN4L4——HTTP下载数据
1
Stream stream = httpWebResponse.GetResponseStream();
-
-
重要成员:
-
ContentLength
:接受到数据的长度1
print(httpWebResponse.ContentLength);
-
ContentType
:接受数据的类型1
print(httpWebResponse.ContentType);
-
StatusCode
:HTTP服务器下发的最新状态码我们可以通过该状态码确认某个操作(如上传下载)是否成功
1
print(httpWebResponse.StatusCode);
-
StatusDescription
:HTTP服务器下发的状态代码的文本1
print(httpWebResponse.StatusDescription);
-
BannerMessage
:登录前建立连接时HTTP服务器发送的消息无法在Unity2021中调用,原因未知,具体可看官网:FtpWebResponse.BannerMessage 属性 (System.Net) | Microsoft Learn
-
ExitMessage
:HTTP会话结束时服务器发送的消息无法在Unity2021中调用,原因未知,具体可看官网:FtpWebResponse.ExitMessage 属性 (System.Net) | Microsoft Learn
-
LastModified
:HTTP服务器上的文件的上次修改日期和时间1
print(httpWebResponse.LastModified);
-
NetworkCredential、Uri、Stream、FileStream类
这些类我们在学习Ftp时已经使用过了,在HTTP通讯时使用方式不变