UN4L3——HTTP关键类

Http相关通讯类的使用和Ftp非常类似,只有一些细节上的区别,之后我们在学习上传下载时再来着重讲解

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//发送客户端请求
HttpWebRequest //主要用于发送客户端请求的类
HttpWebRequest.Create() //创建新的WebRequest,用于进行HTTP相关操作
httpWebRequest.Abort() //如果正在进行文件传输,用此方法可以终止传输
httpWebRequest.GetRequestStream() //获取用于上传的流
httpWebRequest.GetResponse() //返回HTTP服务器响应,也即返回一个HttpWebResponse对象
httpWebRequest.BeginGetRequestStream() //开始异步获取用于上传的流,传入回调函数及其参数
httpWebRequest.EndGetRequestStream() //结束异步获取用于上传的流,返回一个用于上传的流
httpWebRequest.BeginGetResponse() //开始异步获取返回的HTTP服务器响应,传入回调函数及其参数
httpWebRequest.EndGetResponse() //结束异步获取返回的HTTP服务器响应,返回一个HttpWebResponse对象
httpWebRequest.PreAuthenticate //是否随请求发送一个身份验证标头,一般需要进行身份验证时需要将其设置为true
httpWebRequest.Credentials //通信凭证,设置为NetworkCredential对象,设置通信凭证同时还需要设置PreAuthenticate
httpWebRequest.Headers //构成标头的名称/值对的集合
httpWebRequest.ContentLength //发送信息的字节数,上传信息时需要先设置该内容长度
httpWebRequest.ContentType //在进行POST请求时,需要对发送的内容进行内容类型的设置
httpWebRequest.Method //操作命令设置
httpWebRequest.Timeout //设置请求超时时间
WebRequestMethods.Http //调用WebRequestMethods所需要的操作命令字符串
WebRequestMethods.Http.Get //获取请求,一般用于获取数据
WebRequestMethods.Http.Post //提交请求,一般用于上传数据,同时可以获取
WebRequestMethods.Http.Head //获取和Get一致的内容,只是只会返回消息头,不会返回具体内容
WebRequestMethods.Http.Put //向指定位置上传最新内容
WebRequestMethods.Http.Connect //表示与代理一起使用的 HTTP CONNECT 协议方法,该代理可以动态切换到隧道
WebRequestMethods.Http.MkCol //请求在请求URI(统一资源标识符)指定的位置新建集合
//获取服务器反馈信息
HttpWebResponse //主要用于获取服务器反馈信息的类
httpWebResponse.Close() //释放所有资源
httpWebResponse.GetResponseStream() //返回从FTP服务器下载数据的流
httpWebResponse.ContentLength //接受到数据的长度
httpWebResponse.ContentType //接受数据的类型
httpWebResponse.StatusCode //HTTP服务器下发的最新状态码
httpWebResponse.StatusDescription //HTTP服务器下发的状态代码的文本
httpWebResponse.LastModified //HTTP服务器上的文件的上次修改日期和时间

HttpWebRequest

命名空间:System.Net
HttpWebRequest​是主要用于发送客户端请求的类
主要用于:发送HTTP客户端请求给服务器,可以进行消息通信、上传、下载等等操作

  • 重要方法

    1. 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;
    2. Abort()​​:如果正在进行文件传输,用此方法可以终止传输

      1
      httpWebRequest.Abort();
    3. GetRequestStream()​:获取用于上传的流

      上传的具体逻辑看:UN4L5——HTTP上传数据

      1
      Stream stream = httpWebRequest.GetRequestStream();
    4. GetResponse()​:返回HTTP服务器响应

      执行该方法会真正的从Http服务器获取响应httpWebResponse​,执行逻辑,根据该响应可得到状态码确认状态是否成功

      1
      HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
    5. BeginGetRequestStream()​​ / EndGetRequestStream()​​:异步获取用于上传的流

      和Socket的TCP异步通信的使用方法类似,也是需要一个参数为IAsyncResult​的回调函数,并传入执行回调函数要传入的内容

      1
      2
      3
      4
      5
      6
      httpWebRequest.BeginGetRequestStream((result) =>
      {
      HttpWebRequest request = result.AsyncState as HttpWebRequest;
      Stream s = request.EndGetRequestStream(result);
      //..异步接收逻辑
      }, httpWebRequest);
    6. BeginGetResponse()​​ / EndGetResponse()​​:异步获取返回的HTTP服务器响应

      1
      2
      3
      4
      5
      6
      httpWebRequest.BeginGetResponse((result) =>
      {
      HttpWebRequest request = result.AsyncState as HttpWebRequest;
      HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;
      //..异步接收逻辑
      }, httpWebRequest);
  • 重要成员

    1. Credentials​​:通信凭证,设置为NetworkCredential​​对象

      对于需要凭证的,设置通信凭证同时还需要设置PreAuthenticate​​,确保通信凭证起作用

      1
      2
      httpWebRequest.PreAuthenticate = true;
      httpWebRequest.Credentials = new NetworkCredential("xxx", "******");
      • PreAuthenticate​​​:是否随请求发送一个身份验证标头,一般需要进行身份验证时需要将其设置为true​​​

        1
        httpWebRequest.PreAuthenticate = true;
    2. Headers​​:构成标头的名称/值对的集合

      1
      httpWebRequest.Headers["Content-Type"] = "随便写的";
    3. ContentLength​​:发送信息的字节数 上传信息时需要先设置该内容长度

      1
      httpWebRequest.ContentLength = 100;
    4. ContentType​:在进行POST请求时,需要对发送的内容进行内容类型的设置

      上传消息时,根据消息的类型选择何种ContentType​,以帮助服务器判断如何处理消息,
      具体有哪些类型,可看:ContentType的常用类型

      1
      2
      //如果上传的消息是键值对形式的字符串
      httpWebRequest.ContentType = "application/x-www-form-unlencoded";
    5. 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;
    6. Timeout​:设置请求的超时时间

      1
      httpWebRequest.Timeout = 2000;
  • 了解该类更多消息:HttpWebRequest 类 (System.Net) | Microsoft Learn

HttpWebResponse

命名空间:System.Net
它主要用于获取服务器反馈信息的类
我们可以通过HttpWebRequest​对象中的GetResponse()​方法获取
当使用完毕时,要使用Close​释放

1
HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
  • 重要方法:

    1. Close()​:释放所有资源

      1
      httpWebResponse.Close();
    2. GetResponseStream()​:返回从FTP服务器下载数据的流

      具体下载的逻辑实现看:UN4L4——HTTP下载数据

      1
      Stream stream = httpWebResponse.GetResponseStream();
  • 重要成员:

    1. ContentLength​:接受到数据的长度

      1
      print(httpWebResponse.ContentLength);
    2. ContentType​:接受数据的类型

      1
      print(httpWebResponse.ContentType);
    3. StatusCode​:HTTP服务器下发的最新状态码

      我们可以通过该状态码确认某个操作(如上传下载)是否成功

      1
      print(httpWebResponse.StatusCode);
    4. StatusDescription​:HTTP服务器下发的状态代码的文本

      1
      print(httpWebResponse.StatusDescription);
    5. BannerMessage​:登录前建立连接时HTTP服务器发送的消息

      无法在Unity2021中调用,原因未知,具体可看官网:FtpWebResponse.BannerMessage 属性 (System.Net) | Microsoft Learn

    6. ExitMessage​:HTTP会话结束时服务器发送的消息

      无法在Unity2021中调用,原因未知,具体可看官网:FtpWebResponse.ExitMessage 属性 (System.Net) | Microsoft Learn

    7. LastModified​:HTTP服务器上的文件的上次修改日期和时间

      1
      print(httpWebResponse.LastModified);

NetworkCredential、Uri、Stream、FileStream类

这些类我们在学习Ftp时已经使用过了,在HTTP通讯时使用方式不变