首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 批次請求多個網頁:使用陣列與迴圈實現 GET/POST 請求

     編輯:程式設計疑難解答

前言

在 C# 開發中,經常需要向多個 URL 發送 HTTP 請求並獲取回應。初學者可能會想分別撰寫重複的程式碼,但這不僅冗長難維護,也違反了 DRY(Don't Repeat Yourself)原則。本文將示範如何將多個 URL 放入陣列,配合 foreach 迴圈批次處理請求,並正確管理資源釋放。

核心概念

  • WebRequest / WebResponse:.NET Framework 中用於發送 HTTP 請求與接收回應的基礎類別。
  • Stream 與 StreamReader:用於讀取回應資料流,並指定編碼(如 GB2312)轉換為字串。
  • 資源釋放:務必在 finally 區塊或使用 using 陳述式確保 Stream、StreamReader、WebResponse 正確關閉,避免記憶體洩漏。

程式碼範例

string[] urls = {
    "https://www.baidu.com",
    "https://www.example1.com",
    "https://www.example2.com"
};

foreach (var url in urls)
{
    WebRequest request = WebRequest.Create(url);
    WebResponse response = null;
    Stream stream = null;
    StreamReader reader = null;

    try
    {
        response = request.GetResponse();
        stream = response.GetResponseStream();
        reader = new StreamReader(stream, Encoding.GetEncoding("gb2312"));
        string html = reader.ReadToEnd();
        // 這裡可將 html 存入檔案、解析或直接顯示
        Console.WriteLine($"【{url}】回應長度:{html.Length}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"請求 {url} 失敗:{ex.Message}");
    }
    finally
    {
        reader?.Dispose();
        stream?.Dispose();
        response?.Close();
    }
}

進階建議

  1. 非同步處理:若 URL 數量大或需求回應速度,可改用 HttpClient 搭配 await 實現非同步並行請求,大幅提升效能。
  2. 錯誤重試:加入重試機制(如 Polly 套件)應對暫時性網路故障。
  3. 編碼自動偵測:實務上建議優先從回應標頭 Content-Type 取得 charset,失敗再回退至預設編碼。

總結

透過陣列與迴圈,我們能以簡潔、可維護的方式批次執行多個網頁請求。搭配妥善的例外處理與資源釋放,即可構建穩健的資料擷取模組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved