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

網頁資料擷取實戰:HTTP 封包分析與 WebClient 模擬登入

     編輯:關於C#

前置準備:抓包工具

使用 HttpWatch(IE 整合佳)或 HttpLook 捕捉瀏覽器與伺服器的 HTTP 往返封包。重點觀察:

  • Request Headers:Cookie、Referer、User-Agent、Content-Type
  • POST Body:表單欄位、隱藏欄位、驗證碼、__VIEWSTATE 等
  • Response:Set-Cookie、重導向 Location、回傳 HTML/JSON

模擬登入完整代碼

private void Login()
{
    using (WebClient wb = new WebClient())
    {
        // 1. 設定請求標頭
        var headers = new NameValueCollection();
        headers.Add("Cookie", "czJ_cookietime=2592000; czJ_onlineusernum=1651; czJ_sid=w4bGJd");
        headers.Add("Referer", "https://www.example.com/bbs/login.php");
        wb.Headers.Add(headers);

        // 2. 設定 POST 表單資料
        var data = new NameValueCollection();
        data.Add("formhash", "ebd2faac");
        data.Add("referer", "https://www.example.com/bbs/search.php");
        data.Add("loginfield", "username");
        data.Add("username", "jinjazz");
        data.Add("password", "999");
        data.Add("questionid", "0");
        data.Add("answer", "");
        data.Add("cookietime", "2592000");
        data.Add("loginmode", "");
        data.Add("styleid", "");
        data.Add("loginsubmit", "提交");

        // 3. 發送請求並取得回應
        byte[] resp = wb.UploadValues("https://www.example.com/bbs/login.php", "POST", data);
        string html = Encoding.Default.GetString(resp);
        Console.WriteLine(html); // 後續可用 HtmlAgilityPack 解析
    }
}

關鍵技術細節

  1. Cookie 管理:WebClient 不自動處理 Cookie。需手動從登入回應的 Set-Cookie 標頭提取,後續請求帶入 Cookie 標頭。或改用 HttpWebRequest + CookieContainer 自動維護。
  2. 編碼處理:回應編碼可能為 UTF-8、Big5、GB2312。建議檢查 Content-Type charset 或嘗試多種編碼解碼。
  3. 反爬蟲應對:驗證碼、IP 限流、User-Agent 檢查、JS 加密參數。必要時引入 Selenium / Puppeteer 執行真實瀏覽器。
  4. Session 保持:多步驟操作(登入 → 列表 → 詳情)需共用 CookieContainer。

進階工具推薦

  • HtmlAgilityPack:容錯性強的 HTML 解析器,支援 XPath。
  • AngleSharp:現代標準 DOM 解析器,支援 CSS Selector。
  • Flurl.Http:流暢 API 簡化 HTTP 呼叫。
  • HttpClient (.NET Core/5+):取代 WebClient 的現代非同步客戶端。

法律與道德提醒

擷取公開資料前請閱讀目標網站 robots.txt 與服務條款。高頻請求請加入延遲、尊重伺服器資源。敏感個資嚴禁蒐集。合法合規是技術者的底線。

結語

掌握 HTTP 協定細節、善用抓包工具、選對解析庫,是穩健網頁資料擷取的三大支柱。從 WebClient 起步,漸進遷移至 HttpClient + 非同步模式,構建可維護的爬蟲框架。

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