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

C# 模擬 POST 請求下載文件:Fiddler 抓包法快速實現

     編輯:程式設計綜合問答

核心思路

**瀏覽器能下載 → Fiddler 抓包 → C# 模仿請求頭/Body/Cookie 發送 → 接收響應流保存文件**。

步驟

  1. 瀏覽器打開目標頁面,觸發下載。
  2. Fiddler 捕獲請求,右鍵 → Copy → Just Url / Headers / Body。
  3. C# 代碼構造 HttpWebRequest 或 HttpClient 完全複製:
    - URL、Method (POST)
    - Headers: User-Agent, Referer, Cookie, Content-Type 等
    - Body: 表單數據/JSON
  4. 獲取 HttpWebResponse,讀取 GetResponseStream() 寫入文件。

代碼模板


using (var client = new HttpClient())
{
    // 複製請求頭
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 ...");
    client.DefaultRequestHeaders.Add("Referer", "https://example.com/page");
    client.DefaultRequestHeaders.Add("Cookie", "sessionid=abc; ...");

    var content = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("param1", "value1"),
        new KeyValuePair<string, string>("param2", "value2"),
    });

    var response = await client.PostAsync("https://example.com/download", content);
    response.EnsureSuccessStatusCode();

    // 從 Content-Disposition 解析文件名
    string fileName = "download.bin";
    if (response.Content.Headers.ContentDisposition != null)
        fileName = response.Content.Headers.ContentDisposition.FileName.Trim('"');

    using (var fs = new FileStream(fileName, FileMode.Create))
    {
        await response.Content.CopyToAsync(fs);
    }
}

注意事項

  • 若響應為 application/octet-stream 直接保存即可。
  • 涉及驗證碼/簽名/動態 Token 時,需分析 JS 邏輯在 C# 中重現。
  • 大文件建議用 HttpWebRequest 手動分塊下載,支持斷點續傳。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved