本地 HTTP API

透過 App 的區域網路服務,控制播放、管理檔案與同步資料。

先確認連線位址

啟動 App,使用畫面顯示的服務位址。埠號從 9978 到 9998, 取第一個可用的埠。

從其他裝置連線127.0.0.1 指目前裝置。從電腦或另一台手機操作時, 請換成 App 裝置的區域網路 IP 與埠號。範例網址與 IP 僅供示意。
HTTP連線測試
curl "http://127.0.0.1:9978/device"

一般參數放在 Query String 或 application/x-www-form-urlencoded 表單, 不使用整包 JSON body。中文、URL 與 JSON 字串以 --data-urlencode 編碼。

/media、/device 與目錄列表以 text/plain 回傳 JSON。 其他回應請依實際 Content-Type 處理。

OK 不等於動作已完成/action 回傳 OK 只表示已收到請求;未知指令、缺少參數或沒有播放服務時, 可能不執行。端點沒有通用 token 驗證,僅限可信任的區域網路使用。

/action:動作指令

使用 GET 或表單 POST,以 do 選擇操作。

do參數用途
controltype控制目前播放器;可用指令見下表。
danmakutext送出一條即時彈幕;需要有效的播放服務與非空文字。
refreshtype;字幕、彈幕另加 path重新整理頁面,或推送字幕及彈幕。
pushurl把非空 URL 交給 App 推送播放流程。
filepath開啟裝置上的檔案;不是上傳檔案。
searchword把非空關鍵字交給 App 搜尋介面。
settingtext、name(選填)把配置位置或設定文字交給設定流程;text 不可為空。
castconfig、device、history三者均為 JSON 物件字串,交給 App 投放事件處理。
synctype、mode、force 等交換觀看紀錄或收藏;參數與資料格式見下節。

播放控制與即時彈幕

type用途
play播放
pause暫停
stop停止
prev上一項
next下一項
repeat切換循環模式
replay重新播放
HTTP播放控制
curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=control" --data-urlencode "type=pause"

curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=danmaku" --data-urlencode "text=範例彈幕"

重新整理與推送資料

type額外參數用途
live—直播
detail—詳情
player—播放器
category—分類
subtitlepath字幕檔位置
danmakupath彈幕檔位置
HTTP刷新範例
curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=refresh" --data-urlencode "type=category"

curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=refresh" --data-urlencode "type=subtitle" --data-urlencode "path=https://example.com/subtitle.srt"

播放詳情更新

播放詳情使用 playerContent/play 回傳結果的 list[0]。 格式與套用時機見 爬蟲詳情更新。

播放、搜尋、配置與檔案

HTTP推送與設定
curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=push" --data-urlencode "url=https://example.com/video.m3u8"

curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=search" --data-urlencode "word=範例"

curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=setting" --data-urlencode "text=https://example.com/vod.json" --data-urlencode "name=示意配置"

curl -G "http://127.0.0.1:9978/action" --data-urlencode "do=file" --data-urlencode "path=/TV/subtitle.srt"

do=file 依小寫副檔名分派:.apk 交給安裝流程;.srt、.ssa、.ass 交給字幕流程;其他交給設定流程。它使用裝置檔案位置,不會把電腦上的檔案上傳。

投放既有觀看紀錄

config 使用 App 儲存的 Config 記錄,device 取自目標裝置的/device,history 沿用既有 History 記錄。 請將範例替換為實際資料,config 不可改填整份站點配置。

HTTP投放表單
curl "http://127.0.0.1:9978/action?do=cast" --data-urlencode 'config={"type":0,"url":"https://example.com/vod.json","name":"示意配置"}' --data-urlencode 'device={"uuid":"demo-android-id","name":"示意電視","ip":"http://192.0.2.10:9978","type":0}' --data-urlencode 'history={"key":"demo@@@demo-1@@@7","vodName":"範例項目","vodFlag":"Demo","vodRemarks":"第 1 集","episodeUrl":"demo://episode/1","position":120000}'

/action?do=sync:裝置同步

以表單 POST 傳送 JSON 字串。mode 的方向以收到請求的 App 為準; HTTP OK 不代表資料已合併完成。

參數用途
typehistory=觀看紀錄;keep=收藏。
mode0=傳送並接收(預設);1=只接收;2=只傳送。
devicemode 0 / 2 傳送時使用的目標 Device 物件字串;沒有 device 就不主動傳送。
force字串 true 才啟用先刪後合併;未填或其他值不先刪除。
confighistory 使用的 Config 物件字串;接收時需要有效 url,可能先載入該配置。
targetsHistory[] 或 Keep[] 的 JSON 字串;型別依 type 決定。
configskeep 使用的 Config[] 物件陣列字串,不是 URL 字串陣列;以來源 id 對應 Keep.cid。
force=true 會刪除既有資料history 刪除對應配置的觀看紀錄;keep 刪除全部收藏。 一般同步請省略 force 或填 false。

收藏同步的資料關係

JSON / Sync兩個表單欄位的解碼內容
{
  "configs": [
    {
      "id": 7,
      "type": 0,
      "url": "https://example.com/vod.json",
      "name": "示意配置"
    }
  ],
  "targets": [
    {
      "key": "demo@@@demo-1@@@7",
      "cid": 7,
      "type": 0,
      "siteName": "Demo",
      "vodName": "範例項目",
      "vodPic": "https://example.com/poster.jpg",
      "createTime": 1788825600000
    }
  ]
}

將 configs 與 targets 分別轉為 JSON 表單字串。 每筆 Keep.cid 須對應所屬的 Config.id,合併時會轉為本機配置 ID。

HTTP只接收收藏,不先刪除
curl "http://127.0.0.1:9978/action?do=sync&type=keep&mode=1&force=false" --data-urlencode 'configs=[{"id":7,"type":0,"url":"https://example.com/vod.json","name":"示意配置"}]' --data-urlencode 'targets=[{"key":"demo@@@demo-1@@@7","cid":7,"type":0,"siteName":"Demo","vodName":"範例項目","vodPic":"https://example.com/poster.jpg","createTime":1788825600000}]'

觀看紀錄使用 type=history、單一 config 與 History 陣列;合併會比較同名項目的 createTime,不是盲目覆寫全部紀錄。同步可能載入另一份配置,請先備份個人資料。

網頁播放與遙控器

在瀏覽器開啟 App 的服務網址。「播放」頁顯示封面、標題與進度, 可控制播放、切換集數或頻道、單集循環、跳轉與倍速。 預設開啟「搜尋」頁,搜尋與網址推送各自保留輸入內容及瀏覽器紀錄。

拖曳進度滑桿預覽時間,放手後跳轉;方向鍵每次調整五秒。 直播隱藏進度、循環與倍速控制,不能跳轉的影片停用滑桿。 網頁提供 0.5×、1.0×、2.0×、3.0× 四個倍速按鈕。

使用語意分頁參數;舊數字分頁不再對應原頁面,未知值會回到搜尋頁。 檔案頁可另帶 path,例如 /?tab=files&path=/TV。

網址用途
/?tab=search搜尋;未指定 tab 時的預設頁。
/?tab=push網址推送。
/?tab=play播放控制。
/?tab=subtitles字幕上傳與套用。
/?tab=danmaku即時彈幕與彈幕來源。
/?tab=settings配置、裝置操作、日誌與爬蟲測試入口。
/?tab=files裝置檔案與傳輸。

/remote:查詢與控制

GET 查詢狀態,POST 以表單欄位 type 送出指令。 成功回傳 JSON(application/json),禁止快取;沒有本機播放時回傳{"active":false}。 回應不包含播放網址;完整網址由日誌資訊 API 提供。 網頁僅在播放頁位於前景時約每秒查詢,返回播放頁立即更新。

HTTP查詢、設定循環與跳轉
curl "http://127.0.0.1:9978/remote"
curl --data-urlencode "type=repeat_on" "http://127.0.0.1:9978/remote"
curl --data-urlencode "type=repeat_off" "http://127.0.0.1:9978/remote"
curl --data-urlencode "type=seek" --data-urlencode "position=120000" "http://127.0.0.1:9978/remote"
curl --data-urlencode "type=speed" --data-urlencode "speed=1.5" "http://127.0.0.1:9978/remote"
type用途
play播放;已播完時從頭播放。
pause暫停目前影片。
stop停止播放。
prev上一集/上一台;須支援切換項目。
next下一集/下一台;須支援切換項目。
repeat_on開啟目前影片的單集循環;重複請求仍為開啟。
repeat_off關閉單集循環;重複請求仍為關閉。
seek跳到 position 指定的毫秒位置;須支援跳轉,不改變播放/暫停狀態。
speed以 speed 設定 0.1–5.0 倍速;須支援倍速,直播不可用。
欄位類型用途預設
activeboolean是否有可遙控的本機播放;false 時不回傳其餘欄位。—
titlestring目前影片的顯示標題。—
mediaKeystring目前播放來源的識別鍵;套用字幕或彈幕時以 key 傳回,換片後須重新取得。—
artworkstring目前影片的本機封面端點;沒有封面時為空字串,載入失敗時網頁顯示佔位圖。僅 /remote 回傳此欄位。—
positioninteger目前播放位置,單位毫秒,最小為 0。—
durationinteger總長,單位毫秒;未知長度為 0。—
stateinteger1=播放結束;2=就緒但未播放;3=正在播放;6=緩衝中。—
playWhenReadyboolean播放器是否設定為播放;影片已播完時為 false。—
repeatOneboolean目前是否開啟單集循環,播完會重新播放同一部影片。—
liveboolean是否為直播;網頁隱藏循環開關,API 拒絕循環指令。—
canNavigateboolean是否支援上一項/下一項。—
canSeekboolean是否支援網頁跳轉;支援 timeshift 的直播也可使用,未知長度或不可跳轉時為 false。—
canSetSpeedboolean是否支援倍速;直播或播放器不支援時為 false。—
speednumber目前播放倍速,例如 1 或 1.5。—
enginestring目前播放引擎,ExoPlayer 或 mpv。—
videostring播放器回報的視訊尺寸文字。—

artwork 指向同一服務的 /remote/artwork?key=…, 成功回傳 PNG;瀏覽器不需傳送來源網址、Referer 或 Cookie。 key 須對應目前封面;更換封面或停止播放後,舊 key 回傳 404。 缺少或格式不正確的 key 為 400;載入逾時為 503,載入或編碼失敗為 500。

既有 /action?do=control&type=repeat 仍為切換循環。 上一項、下一項及停止可能先派送至播放介面,應以後續 GET 確認結果。

seek 的 position 是非負整數毫秒,超過總長時跳到結尾; 缺少、格式錯誤或超過 64 位元整數範圍時回傳 400。canSeek 為 false 時回傳 409。 支援 直播回看 的來源也可跳轉,位置以目前回看範圍的起點計算。speed 必須是 0.1–5.0 範圍內的有限數值,否則回傳 400;canSetSpeed 為 false 時回傳 409。

缺少或未知指令回傳 400,跨來源的瀏覽器控制請求回傳 403; 無可控制的播放、直播循環或不支援上一項/下一項回傳 409。 不支援的 HTTP 方法回傳 405,主執行緒忙碌或請求中斷回傳 503。

/remote/key:獨立遙控器

從 App 網頁右上角開啟 /remote.html,即可操作遙控器。 返回時會保留原分頁與檔案目錄。

HTTP送出遙控器按鍵
curl --data-urlencode "key=ok" "http://127.0.0.1:9978/remote/key"
POST 表單參數說明
keyup/down/left/right(方向)、ok(確認)、back(返回)、menu(選單)或 0–9。
actionpress=單按(預設)。長按依序送 down(按住)、repeat(持續)、up(放開);取消用 cancel。
id非 press 必填,限 1–64 個英數字或 -。同次長按沿用相同的 key 與 id。

單按或開始長按需有前景頁面或取得焦點的對話框,否則回傳 409。 成功回傳 {"accepted":true,"holding":false};holding 為 true 表示仍按住。

長按 5 秒未續送 repeat 會自動放開;正常結束仍請送 up 或 cancel。

字幕上傳與彈幕套用

先以 GET /remote 取得目前 mediaKey, 再以 POST 表單的 key 與 path 套用來源。 字幕須先上傳到裝置共用儲存區,支援 SRT/SSA/ASS; 彈幕可使用同範圍內的既有檔案,或 HTTP(S) 網址。

HTTP將 MEDIA_KEY 替換成剛查到的 mediaKey
curl --data-urlencode "key=MEDIA_KEY" --data-urlencode "path=/TV/subtitle.srt" "http://127.0.0.1:9978/remote/subtitle"
curl --data-urlencode "key=MEDIA_KEY" --data-urlencode "path=https://example.com/danmaku.xml" "http://127.0.0.1:9978/remote/danmaku"

沒有可控制的本機播放、直播或已換成另一個播放來源時回傳 409; key 格式不正確、檔案無效或超出允許路徑時回傳 400。 這些 POST 與播放控制、按鍵 API 均檢查瀏覽器 Origin,跨來源請求回傳 403。

/remote/info:連線狀態與裝置資訊

點主頁連線狀態可查看 App 版本、variant、buildType、裝置名稱、Android 版本、SDK 與 ABI。 資料由 GET /remote/info 提供,回傳 JSON 並禁止快取; 與提供裝置探索及同步資料的 /device 分開。 網頁離線時保留最後一次成功讀取的資訊。

日誌下載與分享

開啟 /logs.html 查看日誌,自動擷取最長 60 分鐘。 「停止擷取」停止來源裝置的收集;「暫停顯示」只暫停畫面更新。

「下載日誌」與「分享日誌」匯出同一份日誌檔案, 包含版本、裝置、播放摘要、診斷資料與原始日誌。 瀏覽器不支援檔案分享時改為下載,可從下載項目再分享;讀取資訊失敗可按「重新讀取資訊」,保留日誌。

匯出不受搜尋與等級篩選影響,上限 512 KiB;超限保留較新日誌並標示缺漏。 檔案包含匯出時間、狀態取樣時間與日誌筆數。

手機版的裝置清單提供「操作」與「日誌」按鈕,長按裝置名稱可命名。 別名只存於目前手機,依有效裝置識別碼保留,不受 IP 改變影響;清空即恢復原名。

日誌資訊 API

HTTP取得日誌資訊
curl "http://127.0.0.1:9978/log/info"
欄位用途
version / versionCode / variant / buildType應用版本與建置資訊。
device / android / sdk / abis裝置與 Android 資訊。
playback播放狀態,不含 artwork。
playback.url解析後的完整網址,保留 query;無來源為空字串。
collection日誌收集狀態,含 READ_LOGS 權限、目前 UID/PID 等診斷資訊。
playbackLog目前播放的診斷取樣;無播放器時仍依實際狀態回傳。
lastPlaybackError最近一次保存的播放錯誤,沒有錯誤時可為 null。

GET 回傳 JSON;停止或失敗後仍保留來源時,網址也會保留。 不含封面 URL、UUID、序號或 MAC。

/media:播放狀態

HTTP查詢播放狀態
curl "http://127.0.0.1:9978/media"

沒有播放服務、播放器已釋放,或讀取失敗時回傳 {}。有資料時回傳以下結構;Content-Type 是 text/plain,客戶端需自行解析 JSON。

JSON / Media/media 回應
{
  "state": 3,
  "speed": 1,
  "duration": 7200000,
  "position": 120000,
  "url": "https://example.com/video.m3u8",
  "title": "範例項目",
  "artist": "Demo",
  "artwork": "https://example.com/poster.jpg"
}
欄位類型用途預設
stateinteger3=正在播放;6=緩衝中;2=就緒但未播放;其餘狀態回傳 1。—
speednumber目前播放速率,1 表示正常速度。—
durationinteger播放器回報的總長,單位毫秒;未知長度可能是負值,不保證為 -1。—
positioninteger目前播放位置,單位毫秒。—
urlstring目前播放 URL;沒有值時為空字串。—
titlestring媒體標題;沒有值時為空字串。—
artiststring媒體的 artist 中繼資料;沒有值時為空字串。—
artworkstring封面 URI;沒有值時為空字串。—

/device:裝置資訊

JSON / Device/device 回應
{
  "uuid": "demo-android-id",
  "name": "影視TV 示意裝置",
  "ip": "http://192.0.2.10:9978",
  "type": 0,
  "serial": "",
  "eth": "",
  "wlan": "",
  "time": 1788825600000
}

內容為 JSON 字串,Content-Type 是 text/plain。不要把裝置識別碼或 MAC 位址填入公開範例;下方只列欄位用途。

欄位類型用途預設
uuidstring此 App 裝置使用的 Android ID。—
namestring裝置顯示名稱。—
ipstring完整服務位址,包含 http://、區域網路 IP 與實際埠號。—
typeinteger0=電視版;1=手機版。Device 物件另以 2 表示 DLNA 裝置,但本機 /device 不使用此值。—
serialstring系統可取得的裝置序號;可用性受裝置與權限限制。—
ethstringeth0 的 MAC 位址;不保證每個裝置都能取得。—
wlanstringwlan0 的 MAC 位址;不保證每個裝置都能取得。—
timeintegerApp 實例建立時的 Unix 時間,單位毫秒;不是這次 HTTP 回應的時間。—
idinteger資料庫識別碼;/device 建立的是未儲存的 Device,因此通常不輸出此欄位。—

檔案與目錄管理

一般相對路徑以 Android 共用外部儲存根目錄 Path.root() 為基準,不是 App 的私有 data 目錄;實際存取仍受系統儲存權限限制。

端點使用方式參數與行為
/file/{path}GET瀏覽目錄或下載檔案;/file 為共用儲存根目錄。
/uploadPOST multipart/form-datapath 必填且目錄須已存在;檔案使用 multipart 欄位上傳。
/newFolderGET / POSTpath 為既有父目錄,name 為新資料夾名稱。
/renamePOST 表單path 為既有檔案或目錄,name 為新名稱;目標不可已存在。
/movePOST 表單path 為來源,target 為既有目標目錄;保留名稱,不覆蓋同名項目,也不可搬進自身目錄。
/delFolderGET / POSTpath 必填;遞迴刪除指定項目,不可刪除儲存根目錄。
/delFileGET / POST與 /delFolder 共用刪除邏輯,並非只允許刪除一般檔案。
HTTP列目錄與建立資料夾
curl "http://127.0.0.1:9978/file/TV"

curl -G "http://127.0.0.1:9978/newFolder" --data-urlencode "path=TV" --data-urlencode "name=demo-empty"
JSON / Folder瀏覽 /file/TV 的示意回應
{
  "parent": "",
  "files": [
    {
      "name": "demo.mp4",
      "path": "/TV/demo.mp4",
      "time": "2026/09/08 12:00:00",
      "dir": 0
    },
    {
      "name": "subtitles",
      "path": "/TV/subtitles",
      "time": "2026/09/08 12:00:00",
      "dir": 1
    }
  ]
}
欄位用途
parent位於根目錄時為 .;上一層是根目錄時為空字串;其他回傳上一層相對路徑。
files[].name檔案或目錄名稱。
files[].path根目錄內的路徑通常帶前導 /,例如 /TV/demo.mp4。
files[].time最後修改時間,以裝置時區格式化為 yyyy/MM/dd HH:mm:ss。
files[].dir1=目錄;0=一般檔案。

下載、Range 與快取

一般下載回傳 200;單一有效 Range 回傳 206,支援起迄、開放結尾及尾端位元組範圍。多段或無效範圍回傳 416;If-None-Match 命中 ETag 時回傳 304,If-Range 不符時改回完整檔案。

HTTP讀取前 1 KiB
curl "http://127.0.0.1:9978/file/TV/demo.mp4" -H "Range: bytes=0-1023" --output demo-part.bin

重新命名與搬移

HTTP重新命名後搬到另一個既有目錄
curl --data-urlencode "path=/TV/subtitle.srt" --data-urlencode "name=demo.srt" "http://127.0.0.1:9978/rename"
curl --data-urlencode "path=/TV/demo.srt" --data-urlencode "target=/TV/subtitles" "http://127.0.0.1:9978/move"

檔案與目錄均可操作;新名稱只是一個名稱,不能包含路徑分隔符。 目標已存在時不覆蓋,搬移也不能把目錄放進自己裡面。 網頁提供批次搬移與刪除,逐項操作並回報結果。

一般上傳與刪除

HTTP上傳至已存在的 TV 目錄
curl "http://127.0.0.1:9978/upload?path=TV" -F "file=@./subtitle.srt"

multipart 欄位名稱可自訂,上例使用 file;檔名由上傳欄位提供,不能是空字串、.、.. 或包含路徑分隔符。ZIP 會解壓到指定目錄,其他檔案使用原子複製;缺少檔案、目錄不存在或操作失敗會回傳 500 與文字訊息。

刪除端點會直接刪除資料/delFile 與 /delFolder 目前使用同一段遞迴刪除程式;不要依端點名稱假設目錄不會被刪除。下例只針對先前建立的示意目錄,執行前務必確認內容。
HTTP刪除示意目錄
curl -G "http://127.0.0.1:9978/delFolder" --data-urlencode "path=TV/demo-empty"

上傳、新建、重新命名、搬移與刪除都限制在共用儲存根目錄內,禁止刪除或搬移根目錄本身。/file 的區網請求也限制於此範圍;本機 loopback 請求可由 Path.local 解析其他可存取路徑。

可續傳上傳與裝置下載

上傳中斷後,重新選取相同檔案即可續傳。「裝置下載」會將網址內容存入 App 裝置。

以下均使用 POST;/upload/chunk 用 multipart,其餘用表單。 JSON 回應使用 text/plain,禁止快取。

端點參數行為
/upload/startid、path、name、size、sha256;parallel(選填)建立或查詢續傳。id 是 32 位小寫十六進位;size 是檔案位元組數,sha256 是 64 位小寫十六進位。
/upload/chunkid、offset、size;multipart chunk,並行模式另帶 revision上傳分塊;依 start 回傳的 chunkSize 切分,offset 與 size 以位元組計算。
/upload/finishid;並行模式另帶 revision檢查完整大小與 SHA-256,再落檔或解壓 ZIP;只有 complete=true 才完成。
/download/starturl、path;name(選填)由 App 裝置下載 HTTP(S) 檔案到既有目錄;省略 name 時取網址最後一段,無名稱時用 download。
/download/statusid(選填)查詢目前任務;省略 id 可重新取得目前任務。
/download/pauseid暫停進行中的任務;依回傳狀態確認,已結束的任務不改變狀態。
/download/resumeid恢復 paused 或 failed 任務;能否接續取決於來源支援及已保存資料。
/download/cancelid取消任務;停止後為 cancelled,不等同刪除目的檔案。

分塊上傳

先計算整個檔案的 SHA-256,以固定 id 呼叫 start;同一 id 續傳時, path、name、size 與 sha256 必須保持一致。 回應包含 offset、complete 及 chunkSize(目前 4 MiB)。 依 offset 傳送下一塊,全部上傳後呼叫 finish;伺服器檢查 SHA-256 後才完成落檔。

start 指定 parallel=true 時,另外回傳 revision、chunks 及 threads(目前 4)。 chunks 是已收到的分塊索引;chunk 與 finish 均須帶回 revision。 不要只依 offset 判斷並行分塊是否全部完成;若版本改變,重新 start 取得狀態。 過期上傳回傳 404,重新選取原檔案建立或恢復傳輸。

裝置下載任務

HTTP由 App 裝置下載到既有 TV 目錄
curl --data-urlencode "url=https://example.com/video.mp4" --data-urlencode "path=/TV" --data-urlencode "name=demo.mp4" "http://127.0.0.1:9978/download/start"
curl -X POST "http://127.0.0.1:9978/download/status"

每次回應包含任務 id、name、path、state、total、downloaded、speed 與 error。 大小以位元組、speed 以位元組/秒表示;未知 total 為 -1。 pause、resume、cancel 必須帶回同一 id,舊 id 回傳 409;尚無任務時回傳 404。 每個 App 服務同時只執行一個裝置下載,進行中再次 start 回傳 409。

暫停或取消可能先回報 pausing/cancelling,請繼續查詢並以最終狀態為準; 只有 completed 才代表完成,failed 時查看 error。 可用 status 重新取得遺失的任務回應,但任務狀態不保證跨 App 重啟保留。 下載暫存由 App 管理,檔案列表隱藏 .tv-downloads 目錄。

/cache:鍵值快取

使用 GET 或表單 POST。實際儲存鍵為 "cache_" + (rule 為空 ? "" : rule + "_") + key;rule 可用來隔離不同爬蟲的名稱空間。

do參數回應
getkey、rule(選填)回傳儲存的字串;不存在時為空字串。
setkey、value、rule(選填)寫入字串,回傳 OK。
delkey、rule(選填)移除鍵,回傳 OK。
HTTP寫入、讀取與移除
curl -G "http://127.0.0.1:9978/cache" --data-urlencode "do=set" --data-urlencode "rule=demo" --data-urlencode "key=greeting" --data-urlencode "value=Hello"

curl "http://127.0.0.1:9978/cache?do=get&rule=demo&key=greeting"

curl "http://127.0.0.1:9978/cache?do=del&rule=demo&key=greeting"

代理與 App 內部端點

端點參數與行為
/proxy把 Query / 表單參數、請求標頭、parseBody 產生的 files 依序合併後交給 BaseLoader.proxy;後加入的同名鍵會覆蓋前者。
/parsejxs 為以分號分隔的解析前綴;url 為目標網址。parse.html 會以每個前綴 + url 建立 iframe,回傳 text/html。
/image/{key}讀取 ImgUtil 已快取的圖片資料,使用圖片本身的 MIME;找不到 key 時回傳 404。不是任意網址的圖片下載 API。
/tvbus回傳目前直播配置 Core 的 RESP 字串,不是頻道列表。
/回傳 App 內建的 index.html 控制頁;其他未匹配路徑會嘗試讀取內建資源,不存在則回傳 404。

/proxy 的 POST body 不是一律直接攤平成參數:一般表單進入 parms,multipart 會提供暫存檔資訊,原始 body 依 NanoHTTPD 的 parseBody 結果傳遞。爬蟲回應決定狀態、Content-Type、串流與標頭;無效回應或例外會回傳 500。

HTTP解析頁範例
curl -G "http://127.0.0.1:9978/parse" --data-urlencode "jxs=https://example.com/parse?url=" --data-urlencode "url=https://example.com/watch/demo-1"

代理回傳格式與各語言差異請見 Spider Proxy 回傳;RESP 欄位請見 Core 配置。