使用 HttpWatch(IE 整合佳)或 HttpLook 捕捉瀏覽器與伺服器的 HTTP 往返封包。重點觀察:
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 解析
}
}
WebClient 不自動處理 Cookie。需手動從登入回應的 Set-Cookie 標頭提取,後續請求帶入 Cookie 標頭。或改用 HttpWebRequest + CookieContainer 自動維護。Content-Type charset 或嘗試多種編碼解碼。CookieContainer。WebClient 的現代非同步客戶端。擷取公開資料前請閱讀目標網站
robots.txt與服務條款。高頻請求請加入延遲、尊重伺服器資源。敏感個資嚴禁蒐集。合法合規是技術者的底線。
掌握 HTTP 協定細節、善用抓包工具、選對解析庫,是穩健網頁資料擷取的三大支柱。從 WebClient 起步,漸進遷移至 HttpClient + 非同步模式,構建可維護的爬蟲框架。