首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

C# HttpWebRequest 與 HttpWebResponse 實作 HTTP 請求與回應處理範例

     編輯:Java 相關知識

核心類別

.NET 透過 HttpWebRequest(繼承自 WebRequest)與 HttpWebResponse 實現 HTTP 通訊。注意:HttpWebRequest 建構子為 protected,必須透過 WebRequest.Create() 工廠方法建立實例。

範例一:GET 請求取得網頁 HTML

string uri = "https://www.baidu.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.ProtocolVersion = new Version(1, 1);

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// 讀取回應 Header
foreach (string key in response.Headers) {
    Console.WriteLine($"{key}: {response.GetResponseHeader(key)}");
}

// 讀取回應 Body
if (response.ContentLength > 0) {
    using (Stream stream = response.GetResponseStream()) {
        byte[] buffer = new byte[response.ContentLength + 1024];
        int totalRead = 0;
        while (totalRead < response.ContentLength) {
            int read = stream.Read(buffer, totalRead, 1024);
            if (read == 0) break;
            totalRead += read;
        }
        string html = Encoding.UTF8.GetString(buffer, 0, totalRead);
        Console.WriteLine(html);
    }
}

範例二:下載圖片並儲存本地

string imgUrl = "https://example.com/photo.jpg";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(imgUrl);
req.Method = "GET";

using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
using (Stream respStream = resp.GetResponseStream())
using (FileStream fs = new FileStream($"img_{DateTime.Now:yyyyMMddHHmmss}.jpg", FileMode.Create)) {
    respStream.CopyTo(fs); // .NET 4.0+ 直接複製流
}

關鍵點總結

  • 請求建立:WebRequest.Create(uri) → 轉型 HttpWebRequest。
  • 設定屬性:Method、ProtocolVersion、Headers、ContentType 等。
  • 取得回應:GetResponse() → 轉型 HttpWebResponse。
  • 處理 Header:response.Headers 集合。
  • 讀取 Body:GetResponseStream() 取得 Stream,再讀取或複製。
  • 資源釋放:善用 using 確保連線與流正確關閉。

現代替代方案

.NET Core / .NET 5+ 建議使用 HttpClient,支援非同步、連線池、更簡潔的 API:

using var client = new HttpClient();
string html = await client.GetStringAsync("https://www.baidu.com");
byte[] imgBytes = await client.GetByteArrayAsync(imgUrl);
await File.WriteAllBytesAsync("photo.jpg", imgBytes);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved