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

HTTP GET 請求無法獲取響應內容?Fiddler 抓包排查全流程

     編輯:程式設計疑難解答

常見原因清單

部分網頁 GET 請求返回空內容或異常,通常由以下因素導致:

  1. 協議不匹配:目標站點強制 HTTPS,但請求用 HTTP(或反之)。
  2. User-Agent 缺失/被屏蔽:未設置 UA 或使用默認 UA(如 Java/1.8、python-requests)被反爬蟲攔截。
  3. 重定向未處理:響應為 301/302,客戶端未自動跟隨跳轉。
  4. 動態渲染內容:頁面數據由 AJAX 異步加載,初始 HTML 不包含目標數據。
  5. 關鍵 Header 缺失:Referer、Cookie、Host、X-Forwarded-For 等被服務端校驗。

Fiddler 抓包排查步驟

  1. 啟動 Fiddler,確保 Capture Traffic 開啟。
  2. 在瀏覽器正常訪問目標頁面,完成所有交互。
  3. 在 Fiddler 會話列表中找到目標請求(通常是文檔類型 text/html)。
  4. 對比 Request Headers:將你的代碼發送的 Header 與瀏覽器逐項對齊(UA、Cookie、Referer、Accept-Language 等)。
  5. 檢查 Response:查看狀態碼、Content-Type、實際返回體,確認是否為加密、壓縮或空內容。

代碼層面修正示例

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.AllowAutoRedirect = true; // 自動跟隨重定向
request.CookieContainer = new CookieContainer(); // 維持會話
// 若需攜帶特定 Cookie
request.CookieContainer.Add(new Uri(url), new Cookie("sessionid", "abc123"));

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)) {
    string html = reader.ReadToEnd();
    // 處理 html...
}

進階提示

  • 若為 AJAX 數據,直接調用該 AJAX 接口(觀察 Fiddler 中 XHR 請求),而非抓取頁面 HTML。
  • 遇到 JavaScript 加密/簽名參數,需逆向分析或使用 Selenium/Puppeteer 等無頭瀏覽器。
  • 尊重 robots.txt 與站點服務條款,控制抓取頻率。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved