首頁 > 軟體

C#中的HttpWebRequest類用法詳解

2022-01-15 13:00:51

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.jb51.net/article/234688.htm

到此這篇關於C#中的HttpWebRequest類用法的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com