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

Linux 定時模擬訪問網頁:cURL + Shell 腳本實現參數鏈式呼叫

     編輯:程式設計綜合問答

需求

每 10 分鐘呼叫 `https://www.xxx.com/a.php?a=0&record=0`,取得回應後解析新的 `a`、`record` 參數,帶入下一次呼叫,循環執行。

Shell 腳本實現 (cron + 迴圈)


#!/bin/bash
# fetch_chain.sh
URL_BASE="https://www.xxx.com/a.php"
PARAM_A=0
PARAM_RECORD=0
OUTFILE="save.txt"

while true; do
    # 組裝 URL
    FULL_URL="${URL_BASE}?a=${PARAM_A}&record=${PARAM_RECORD}"
    
    # cURL 獲取內容,靜默模式,輸出至變數
    RESPONSE=$(curl -s -G --data-urlencode "a=${PARAM_A}" --data-urlencode "record=${PARAM_RECORD}" "${URL_BASE}")
    
    # 追加寫入日誌 (含時間戳)
    echo "[$(date '+%F %T')] a=${PARAM_A} record=${PARAM_RECORD} -> ${RESPONSE}" >> "${OUTFILE}"
    
    # 解析新參數 (假設回應為純文字 "a=新值 record=新值" 或 JSON)
    # 這裡需根據實際回應格式調整 awk/sed/jq 解析邏輯
    # 範例:回應為 "a=123 record=456"
    NEW_A=$(echo "$RESPONSE" | grep -oP 'a=\K\d+')
    NEW_RECORD=$(echo "$RESPONSE" | grep -oP 'record=\K\d+')
    
    if [[ -z "$NEW_A" || -z "$NEW_RECORD" ]]; then
        echo "[$(date)] 解析失敗,回應: $RESPONSE" >> "${OUTFILE}"
        break
    fi
    
    PARAM_A=$NEW_A
    PARAM_RECORD=$NEW_RECORD
    
    sleep 600 # 10 分鐘 = 600 秒
done

部署方式

  1. 存為 `/usr/local/bin/fetch_chain.sh`,`chmod +x`。
  2. 使用 `systemd` 服務單元 或 `nohup ./fetch_chain.sh &` 在後台長期運行 (比 cron 適合長鏈狀態保持)。
  3. 若用 `cron`:`*/10 * * * * /usr/local/bin/fetch_chain_once.sh` (需將狀態 `a`, `record` 存檔案 `/tmp/chain_state` 跨調用保持)。

關鍵指令說明

  • `curl -s`:靜默模式,不輸出進度條。
  • `-G --data-urlencode`:正確編碼 GET 參數,避免特殊字元問題。
  • `jq`:若回應為 JSON,`jq -r '.a'` 解析最穩健。
  • `sleep 600`:腳本內迴圈睡眠;若用 cron 則無需睡眠,由排程觸發。

結論:Shell 腳本 + cURL + 迴圈/排程 完美滿足參數鏈式定時呼叫需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved