1. 程式人生 > >C# HttpWebRequest 筆記

C# HttpWebRequest 筆記

eth get 遠程 uwp strong 響應 logs tle hal

目錄:

1,HttpWebRequest 實例化

2,GetResponse 獲取請求結果

3,獲取結果

4,獲取流信息

HttpWebRequest 是一個Http 請求類,繼承於 WebRequest。

WebRequest 是一個抽象類,能夠對統一資源標識符 (URI) 發出請求。

WebRequest 有以下派生類:

  • System.IO.Packaging.PackWebRequest
  • System.Net.FileWebRequest
  • System.Net.FtpWebRequest
  • System.Net.HttpWebRequest

使用時

using System.Net;

1,HttpWebRequest 實例化

以下是實例化方法,使用 visual studio 編寫代碼時,會提示 可以簡化代碼,原因下面說

            string url = "http://baidu.com";
            HttpWebRequest httpWeb = (HttpWebRequest)HttpWebRequest.Create(url);

HttpWebRequest 對應的是 URL,所以其連接字符串必須是 有效的 HTTP 字符串,網址前面必須加上 Http 協議類型。

可以是

  • http://
  • https://

可以加端口

http://baidu.com:666

也可以是IP,但也要加上 http 頭和端口。

HttpWebRequest 對象實例化,一般不直接new。而是使用.Create 方法返回一個 WebRequest 對象。

HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");

註意下面兩個方法:

HttpWebRequest.Create
WebRequest.Create

Cretate 返回的都是 WebRequest 對象,因為 Create 是一個靜態方法

        public static WebRequest Create(string requestUriString);

        public static WebRequest Create(Uri requestUri);

        public static WebRequest CreateDefault(Uri requestUri);

所以,創建HttpWebRequest 實例時,這樣創建:

HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");

HttpWebRequest 支持 GET 和 POST 兩種方式進行請求,

設置方法

            HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create("https://www.whuanle.cn:443");
            httpWeb.Method = "GET";

WebRequest 的請求類型。

  • http://

  • https://

  • ftp://

  • file://

2,GetResponse 獲取請求結果

HttpWebRequest 對象 使用 .GetResponse() 方法, 獲取返回結果,.GetResponse() 返回的是一個 WebResponse 對象。

WebResponse 對象的方法

Close()

當由子類重寫時,將關閉響應流。

CreateObjRef(Type)

創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。

(Inherited from MarshalByRefObject)
Dispose()

釋放 WebResponse 對象使用的非托管資源。

Dispose(Boolean)

釋放由 WebResponse 對象使用的非托管資源,並可根據需要釋放托管資源。

Equals(Object)

確定指定的對象是否等於當前對象。

(Inherited from Object)
GetHashCode()

作為默認哈希函數。

(Inherited from Object)
GetLifetimeService()

檢索控制此實例的生存期策略的當前生存期服務對象。

(Inherited from MarshalByRefObject)
GetObjectData(SerializationInfo, StreamingContext)

使用序列化目標對象所需的數據填充 SerializationInfo。

GetResponseStream()

當在子類中重寫時,從 Internet 資源返回數據流。

GetType()

獲取當前實例的 Type。

(Inherited from Object)
InitializeLifetimeService()

獲取生存期服務對象來控制此實例的生存期策略。

(Inherited from MarshalByRefObject)
MemberwiseClone()

創建當前 Object 的淺表副本。

(Inherited from Object)
MemberwiseClone(Boolean)

創建當前 MarshalByRefObject 對象的淺表副本。

(Inherited from MarshalByRefObject)
ToString()

返回表示當前對象的字符串。

(Inherited from Object)

3,獲取結果

使用 WebSponse 對象的 GetResponseStream() 方法獲取數據流

                string Url = "https://www.whuanle.cn:443";
                WebRequest wReq = WebRequest.Create(Url);
                WebResponse wResp = wReq.GetResponse();
                System.IO.Stream respStream = wResp.GetResponseStream();

4,獲取流信息

                string Url = "https://www.whuanle.cn:443";
                WebRequest wReq = WebRequest.Create(Url);
                WebResponse wResp = wReq.GetResponse();
                System.IO.Stream respStream = wResp.GetResponseStream();

                using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8))
                {
                    string a = "";
                    while ((a = reader.ReadLine()) != null)
                    {
                        Console.WriteLine(a);
                    }
                    return reader.ReadToEnd();
                }

上面是一個獲取流的例子,以 UTF8 編碼輸出流,以行讀取。

下面是另一個方法

                string Url = "https://www.whuanle.cn:443";
                WebRequest wReq = WebRequest.Create(Url);
                WebResponse wResp = wReq.GetResponse();
                System.IO.Stream respStream = wResp.GetResponseStream();

                using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.UTF8))
                {
                    string str = reader.ReadToEnd();
                    Console.WriteLine(str);
                }
使用 reader.ReadToEnd() 可以一次性從流中讀取所有的字符。 --------------------------- 推薦一位其他人的文章,裏面列出了WebRequest、WebResponse 等對象所有的方法、屬性等。 地址: https://www.cnblogs.com/xinaixia/p/4414990.html

C# HttpWebRequest 筆記