定時任務

文件版本:20260905

文件目前版本對應的 APP 版本:

  • iOS:>= 3.16
  • Android:>= 1.8.0
  • macOS / Windows(PC 端):>= 1.0.21

定時任務可以把一條 請求重放 或一整條 組合重放 規則,依 Cron 或自訂間隔自動執行。適合秒殺壓測、活動開賣瞬間驗證、定時巡檢介面等「人手點來不及」的場景。

典型場景:電商秒殺窗口極短,人工點擊很容易錯過。可以先從抓包歷史取出下單請求(或編成組合重放),再建一條定時任務,在開賣前依秒級間隔自動送出,並用自動終止條件在「搶購成功 / 活動結束」時停掉任務。

組合重放本身的編排、依賴注入、表達式寫法,見 組合重放使用教程


目錄

  1. 功能概覽
  2. 快速上手
  3. 入口與任務管理
  4. 任務目標
  5. 排程設定
  6. 自動終止
  7. 何時會真正執行
  8. 執行歷史與統計
  9. 典型場景
  10. 常見問題

一、功能概覽

能力說明
請求重放依快照重放單條 HTTP/HTTPS 請求(Method / URL / Header / Body)
組合重放依快照執行整條組合規則(拓撲分層、表達式、依賴注入都會跑)
Cron6 欄位表達式(含秒):秒 分 時 日 月 週
自訂依間隔秒循環執行;可限制次數、持續時長(iOS / PC 還可指定開始時間)
自動終止僅兩種:回應 Body 正規表示式、JSON 欄位值完全相等。命中後任務被停用,不是暫停
執行歷史獨立的「執行歷史」面板,含 Avg / P95 / P99、成功率

二、快速上手

  1. 先抓包,取得要定時執行的 HTTP/HTTPS 請求;若要跑流程,先在組合重放裡建好規則並儲存。
  2. 進入 定時任務 列表,點 + / 新增定時任務
  3. 填寫 Job名稱,選擇目標類型:
    • 請求重放:從歷史裡選一條請求,可以再改查詢參數、請求頭、請求 Body
    • 組合重放:從既有組合規則裡選一條,可以再改每個節點(請求)的參數
  4. 選擇 Cron自訂,確認設定頁裡的「最近幾次執行時間 / 下次執行時間」預覽合理。
  5. (可選)打開 自動終止,用正規表示式或 JSON 欄位比對「成功 / 結束」回應。
  6. 確認任務為 已啟用,然後:
    • iOS / Android:開始抓包(VPN)。未開抓包時任務不會跑。執行期間 VPN 開著,請求也會進請求歷史,且已設定的重寫/指令碼會生效。
    • 桌面端:保持 ApiCatcher 視窗執行即可,不依賴 VPN。若要讓重寫/指令碼作用到定時任務送出的請求,需要啟動擷取。
  7. 點進任務查看 執行歷史

三、入口與任務管理

3.1 怎麼進「定時任務」

  • 抓包首頁右上角 +定時任務
  • 請求重放組合重放執行頁 右上角點鬧鐘按鈕,可帶著目前請求或規則直接建立

3.2 建立 / 編輯 / 刪除 / 啟用

操作方式
建立列表右上角 +,或空狀態「新增定時任務」
看歷史點一下任務列
編輯左滑 → 編輯
刪除左滑 → 刪除(會一併刪除該任務的執行歷史)
啟用 / 停用編輯頁 Toggle「啟用」

新建時預設啟用。

編輯既有任務時,不能更換目標類型,也不能另選一條請求/規則;仍可改名稱、啟用開關、快照裡的請求參數/節點參數、排程方式和自動終止。


四、任務目標

目標只有兩種:

Job目標執行內容
請求重放執行單個 HTTP 請求,支援表達式注入
組合重放執行多個 HTTP 請求,依組合重放規則編排的順序執行,支援依賴注入、表達式注入

若組合重放規則更新後想讓 Job 跟著變,就必須再建一條新的 Job。


五、排程設定

兩種類型:Cron / 自訂

設定頁會預覽最近/下次若干次執行時間(最多 5 條)。

5.1 Cron

表達式為 6 段,順序:

秒  分  時  日  月  週

第 7 段(年)即使寫了也會被忽略。少於 6 段就無法算出下次時間,不會排程

這不是 Linux crontab 的 5 欄位寫法。例如 */5 * * * *(每 5 分鐘)在這裡無效。

支援的寫法:

  • *:該欄位任意取值
  • ?:用在日或週,表示不限定
  • 單個數字:如秒 0、時 9
  • 秒欄位步長 /:如 0/30 表示每 30 秒

預設/佔位示例:

0 * * * * ?

含義:每分鐘的第 0 秒。

常用例子:

表達式含義
0 * * * * ?每分鐘第 0 秒
0 0 * * * ?每小時的 0 分 0 秒
0 0 9 * * ?每天 09:00:00
0/30 * * * * ?每 30 秒

需要「每 N 分鐘」時,請用 自訂,把間隔設為 N × 60 秒。

表達式框旁可用 AI 依自然語言產生 Cron。產生後請看下方預覽時間是否符合預期。

空表達式或算不出下次時間:該任務這次不排程,不會因此自動停用

5.2 自訂

沒有單獨的「結束時間」欄位。依固定間隔循環執行,次數持續時長 滿足其一即停(每次執行前檢查)。

欄位單位說明
間隔每隔多久執行一次,至少為 1
最大執行次數達到次數後停止
持續時長分鐘從首次執行起持續多久後停止

次數、時長的計數在引擎記憶體裡。行程重啟後計數歸零;但若任務已被停用,不會自動再啟用。重新打開啟用開關後,次數從 0 再計。

跑滿次數或達到時長後,任務會被寫成 未啟用


六、自動終止

介面名稱:自動終止。含義是:一旦命中,不管 Cron 還有沒有下次、自訂次數有沒有跑完,都不再繼續。

只有兩種條件,沒有依 HTTP 狀態碼終止

類型比對對象規則
正規表示式回應 Body 文字任意位置命中即可(不是整串必須等於)
欄位選擇回應 JSON依路徑取值後,與「符合值」做 字串完全相等

補充:

  • 多條條件是 或(OR),任一命中即停。
  • 組合重放可指定 觀察節點;只看該節點的執行結果。
  • JSON 比較是字串完全相等:數字 200 要填符合值 200;布林為 true / false

命中後的行為是 停用任務,任務還在,歷史還在,不會刪除。


七、何時會真正執行

受限於系統,各端實作不同。

iOS

定時任務需在 VPN 行程執行,開始抓包後才會生效。

情境是否繼續跑
已開始抓包,主 App 進背景
已開始抓包,劃掉主 App,VPN 仍開
停止抓包全部 timer 取消,停止
系統因記憶體回收 VPN 行程停止;再次開始抓包才會重新載入已啟用任務
未開抓包不執行。儲存任務只寫入資料庫,等下次開始抓包再排程

請求逾時 15 秒。VPN 開啟時,重放走本機 MITM(127.0.0.1:8888),因此 重寫規則、指令碼 會作用在這些請求上,抓包歷史裡也可能再出現對應紀錄。

Android

定時任務需在 VPN 服務執行,開始抓包後才會生效。

情境是否繼續跑
抓包中,只滑到背景(前景通知還在)通常會繼續
停止抓包stop(),協程取消,記憶體裡的次數/首次時間清零
強制結束 AppVPN 與行程一起沒了,任務停
系統因省電殺掉行程停止;若前景服務被系統拉起並再次 start(),才會重新排程仍為啟用的任務

連線/讀取逾時各 30 秒。同樣走本機 MITM,抓包歷史裡可能出現定時重放的流量。

桌面端

在 APP 行程執行,行程還在就能執行,行程結束就不再執行。

情境是否繼續跑
視窗開著(可最小化)
未開抓包
結束應用程式停止

單請求逾時 30 秒;組合重放每個節點逾時 5 秒。請求走系統代理;若此時本機擷取開著,重寫規則、指令碼 會作用在這些請求上,抓包歷史裡也可能再出現對應紀錄。

組合重放執行規則(三端一致)

  • 依依賴拓撲分層;同一層並行,下一層等上一層完成。
  • 某節點非 2xx(或送出失敗)後,後續層 跳過(不再請求)。
  • 快照裡的表達式、依賴注入、全域變數都會執行。

八、執行歷史與統計

點任務進入 執行歷史(不是編輯頁)。

頂部「統計詳情」依 全部執行紀錄 彙總(一次定時觸發算一條,不是依單條 HTTP):

  • Avg / P95 / P99:先算每一次執行的整段耗時(該條紀錄的結束時間 − 開始時間),再對全部紀錄取平均和第 95 / 99 百分位,介面顯示為毫秒
  • Success Rate / Success / Failure:某一次執行裡 所有請求都成功 才算這次成功;組合重放有一個節點失敗,整次算失敗。再據此統計全部紀錄的成功率和成功/失敗次數

點某條紀錄可查看這次送出的請求(詳情)。如果是組合重放,會先列出各個節點,再點節點看詳情。

右上角可以清空該任務的全部歷史。刪除任務時,歷史會一起刪掉。

這套資料在獨立表裡,不是主介面「歷史紀錄/請求歷史」那張表。但如上一節所述:開著抓包時,重放往往還會再進主歷史。

主歷史裡的這些紀錄 沒有「定時任務」標記,看起來就像普通抓包。


九、典型場景

場景 1:秒殺開賣前高頻打單

  1. 抓到下單介面,確認 Body/Header 無誤(需要動態時間戳時,用組合重放節點寫 ${method.timestamp()})。
  2. 新建定時任務,目標選該請求或組合規則。
  3. 自訂:開始時間設為開賣前數秒(務必設未來時間),間隔 1 秒。
  4. 自動終止:JSON 欄位 code 符合 200,或正規表示式符合 "搶購成功" / "活動已結束"
  5. iOS / Android 提前開始抓包;桌面端保持視窗開啟。

場景 2:每分鐘巡檢一條健康檢查介面

三端都可用 Cron:

0 * * * * ?

不配自動終止,任務會一直依分鐘跑,直到你手動停用,或停止抓包(行動端)/結束應用程式(桌面端)。

場景 3:登入 + 業務介面的定時迴歸

  1. 在組合重放裡配好:登入 → 業務介面,並做好 token 依賴注入。
  2. 用該規則建立定時任務。

十、常見問題

Q:任務儲存了但不跑?
A:iOS / Android 必須先 開始抓包。桌面端必須讓應用程式保持執行。再確認任務是「已啟用」,Cron 至少 6 段且預覽能算出時間。

Q:自訂任務儲存後立刻變成未啟用?
A:把開始時間設成過去時間,引擎會直接停用且一次都不執行。請改成未來時間後重新啟用並儲存。

Q:改了組合重放規則,定時任務沒變化?
A:預期行為。任務綁的是建立時儲存的快照。請刪除後重建。

Q:為什麼主歷史裡也能看到這些請求?
A:行動端開著 VPN 時,定時重放會走本機 MITM,和普通抓包同一套入庫。請到任務的「執行歷史」看專用報表;主歷史裡沒有定時任務標記。

Q:自動終止配了狀態碼 200 怎麼不生效?
A:沒有「依 HTTP 狀態碼終止」。請改用 JSON 欄位(例如 code == 200)或正規表示式比對 Body。

Q:為什麼有的組合節點沒送出去?
A:與手動執行組合重放相同:上一層非 2xx 後,後續層跳過。被跳過的觀察節點沒有 Body,自動終止也不會命中。

Q:解除安裝 App/清除資料後任務還在嗎?
A:任務和歷史都在本機。解除安裝或清除資料會遺失。

Q:需要一直開著重寫規則嗎?
A:行動端定時請求會進 MITM。若有 Mock/丟棄/修改規則符合這些 URL,定時任務打出去的也是被改過的結果。排查「回應不對」時先看重寫和指令碼。