RapidAPI 白名單解決,無法下載伺服器檔案
平台與 API
平台 & API 服務:RapidAPI 的 YouTube MP36 (
youtube-mp36.p.rapidapi.com)用途:將 YouTube 影片轉換成 MP3 音訊檔案
問題場景
當您在雲端伺服器(如 Vercel、RunPod、Google Colab)上使用這個 API 時:
✅ 第一步成功:呼叫 API 取得 MP3 下載連結
❌ 第二步失敗:用程式下載該 MP3 檔案時被阻擋(404 / 403 錯誤)
✅ 但在瀏覽器:直接點擊下載連結卻可以正常下載
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 你的伺服器 │ ──→ │ RapidAPI │ ──→ │ 取得下載 │
│ (RunPod) │ │ MP36 API │ │ 連結 ✓ │
└─────────────┘ └──────────────┘ └─────────────┘
│
↓ 用程式下載該連結
│
┌─────────────┐
│ 下載伺服器 │ ──→ ❌ 404 被擋!(沒有身份識別)
└─────────────┘
為什麼會這樣?
下載伺服器會檢查「誰來下載」
一般程式請求缺少「身份識別」資訊
伺服器認為是「未授權的機器人」→ 阻擋
🎯 總結
問題:雲端伺服器用程式下載 RapidAPI MP36 的音訊檔案時被阻擋
原因:缺少身份驗證,下載伺服器無法識別請求來源
解決:加入白名單標頭
方法一:User-Agent 加 username
方法二:X-RUN 標頭加 MD5(推薦)
建議:兩種方法同時使用,確保最高成功率
補充說明:這個白名單機制是專門針對「下載音訊檔案」這個步驟,
與「呼叫 API 取得下載連結」是兩個不同階段。
第一階段用 RapidAPI Key,第二階段用白名單標頭。
🔧 詳細說明 - 解決方案
官方提供 兩種白名單驗證方法,讓下載請求能「表明身份」:
📊 兩種方案比較
| 項目 | 方案一(UA 加 username) | 方案二(X-RUN MD5)⭐ |
| 安全性 | 🟡 明文傳輸使用者名稱 | 🟢 加密傳輸(MD5) |
| 實作難度 | 🟢 簡單(直接字串拼接) | 🟡 需要 MD5 轉換 |
| 成功率 | 🟢 高 | 🟢 高 |
| 推薦程度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
最佳實踐:同時使用兩種方法(雙重保險),成功率最高!
方案一:在 User-Agent 加上使用者名稱
原理:在請求標頭的 User-Agent 字串中,附加您的 RapidAPI 使用者名稱
headers = {
# 一般瀏覽器 UA + 分號 + 您的 RapidAPI username
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36; your_username'
}
response = requests.get(download_url, headers=headers)
特點:
✅ 簡單直觀,不需額外處理
⚠️ 明文傳輸使用者名稱
方案二:使用 X-RUN 自訂標頭(推薦)⭐
原理:新增一個自訂標頭 X-RUN,值是您的 RapidAPI 使用者名稱的 MD5 雜湊值
import hashlib
# 步驟 1:計算您的 username 的 MD5
username = "your_username" # 您的 RapidAPI 帳號名稱
md5_hash = hashlib.md5(username.encode()).hexdigest()
# 結果範例:abc123def456...(32 位元字串)
# 步驟 2:在下載請求中加入此標頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'X-RUN': md5_hash # 白名單驗證標頭
}
response = requests.get(download_url, headers=headers, stream=True)
特點:
✅ 不直接暴露使用者名稱(經過 MD5 加密)
✅ 更安全的身份驗證方式
✅ 可與方案一併用(雙重保險)
🔍 如何取得您的 RapidAPI 使用者名稱?
登入 RapidAPI 官網
點擊右上角大頭貼 → My Profile
在個人資料頁面找到
Username(通常是英文/數字組合)這就是要拿來計算 MD5 的字串
⚠️ 注意:是
Username(帳號 ID),不是 Email
💡 常見問題
Q1:為什麼需要白名單?
A:防止濫用。下載伺服器需要確認「下載者是付費/授權的 API 使用者」,而不是隨意爬蟲。
Q2:不加白名單會怎樣?
A:在雲端環境(RunPod、Vercel)下載時會出現 404/403 錯誤,導致無法取得音訊檔案。
Q3:MD5 值需要每次重新計算嗎?
A:不用!同一個使用者名稱的 MD5 值是固定的,可以計算一次後儲存在環境變數中。
Q4:可以在瀏覽器下載,為什麼程式不行?
A:瀏覽器會自動帶上完整的 Cookie、Referer 等資訊,而程式請求預設是「乾淨」的,缺少身份識別。