前言與限制
百度網盤分享頁面為動態渲染,直連下載需模擬瀏覽器請求流程。本實作基於 Jsoup 解析分享頁 + 模擬內部 API 請求。已知限制:同 IP 短時間請求 3 次後觸發驗證碼,需引入驗證碼識別或代理池方可量產。
核心流程
- 請求分享頁 HTML,提取
yunData.SIGN、TIMESTAMP、SHARE_ID、uk、shareid、fs_id 等關鍵參數
- 呼叫
/share/list 獲取檔案列表(含 fs_id)
- 對每個
fs_id 呼叫 /api/sharedownload 獲取真實 dlink
關鍵程式碼
1. HTTP 工具類
public class HttpRequest {
public static String get(String url) throws Exception {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.setReadTimeout(10000);
try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) sb.append(line).append('\n');
return sb.toString();
}
}
}
2. 核心解析邏輯
public class BaiduNetDisk {
public static List
關鍵參數說明
| 參數 | 來源 | 用途 |
| sign / timestamp | 分頁 JS 變數 | 下載 API 簽名驗證 |
| uk / shareid | 分頁 JSON / JS | 用戶唯一標識 / 分享唯一標識 |
| fs_id | /share/list 回傳 | 檔案唯一標識,下載 API 需要 |
| bdstoken | Cookie / 頁面 | 防 CSRF token,實際需從 Cookie 獲取 |
| app_id | 頁面 JSON | 客戶端標識(250528 為網頁版) |
反爬蟲對策(生產級必備)
- IP 代理池:輪換出口 IP,避免單 IP 觸發驗證碼
- 請求節流:隨機延遲 2-5 秒,模擬人類行為
- 完整 Header 模擬:User-Agent、Referer、Cookie(含 BDUSS)、Accept-Language
- 驗證碼識別:接入 OCR 服務(如百度 AI、騰訊雲)自動破解
- 瀏覽器自動化:Selenium/Playwright 真實瀏覽器環境,繞過 JS 混淆與指紋檢測
法律與道德提醒
百度網盤用戶協議禁止未授權爬蟲與下載工具。本代碼僅供技術研究學習,嚴禁用於商業用途、大規模分發或侵犯版權內容下載。請尊重知識產權,支持正版。
結語
獲取百度網盤真鏈核心在於參數提取準確性與反爬蟲對抗。JS 逆向分析(sign 生成算法、bdstoken 獲取)是進階關鍵。建議優先使用官方開放 API(如百度雲開放平台)或用戶授權 OAuth 流程,合規且穩定。