您好,登錄后才能下訂單哦!
這篇文章主要介紹了shell如何批量curl接口腳本,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
最近,剛接一需求,如下:
DBA會將一些服務規則的數據導出,然后一條條手動去curl某應用接口,從而完成相應的業務要求。
那么問題來了,DBA導出的數據是格式化的,要curl的接口也是格式化的,需要的,只是將相應的數據替換成對應的值即可。注意,不保證所有的命令都能執行成功,有可能需要重新跑接口。
很明顯,手動一條條地去寫curl命令,然后一條條執行,然后觀察結果,做出判斷,這對于少數幾個數據來說,是可行的。但是假設,數據有幾百條、幾千條幾萬條呢,那就不可能人工一條條去搞了吧。因此,shell腳本就該出場了(當然了,有同學說,我用其他語言也可以啊,甚至說我這個功能寫到代碼里就可以了,然而這些特殊無意義的代碼,是不需要長期保留下來的)。
該shell腳本只要做好三件事就行了:
1. 讀取源數據文件的內容,替換接口的數據格式;
2. 執行命令,完成業務操作;
3. 記錄完整的日志,以便后期排查對比;
需求很簡單,不懂語法沒關系,查一下嘛。參考代碼如下:
#!/bin/bash log_file='result.log' param_file=$1 # 源數據在命令行中指定 log_cmd="tee -a $log_file" i=1 for line in `cat $param_file`; do echo "read line" $i ":" $line | tee -a $log_file let "i=$i+1" OLD_IFS=$IFS;IFS=","; arr=($line) # 分割數據到數組 IFS=$OLD_IFS; curl_cmd="curl -d 'uId=${arr[0]}&bid=${arr[1]}&bA=${arr[2]}&to=6&bP=30&fddays=5' http://localhost:8080/mi/api/ss/1.0.1/co/apply" echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file eval "$curl_cmd 2>&1" | tee -a $log_file # 使用 eval 命令,把錯誤日志和接口返回結果一并帶回,到后續console及日志存儲 echo `date "+%Y-%m-%d %H:%M:%S"` "end <<===" $curl_cmd | tee -a $log_file done echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file
源數據格式參考如下:
234,201708222394083443,5000 4211,201782937493274932,3000 23,201749379583475934,2000
當讀取的文件格式為空格分隔的文件時,該讀取將發生異常,換成另一種方式讀取行:
#!/bin/bash log_file='result.log' param_file=$1 log_cmd="tee -a $log_file" i=1 while read line; do echo "read line" $i ":" $line | tee -a $log_file let "i=$i+1" arr=($line) curl_cmd="curl -d 'uId=${arr[0]}&bid=${arr[1]}&bt=${arr[2]}&toBorrowType=6&borrowPeriod=30&fddays=5' http://localhost/mi/c/1.0.1/c/n" echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file #`$curl_cmd` 2>&1 $log_file | tee -a $log_file eval "$curl_cmd 2>&1" | tee -a $log_file echo `date "+%Y-%m-%d %H:%M:%S"` "end <<===" $curl_cmd | tee -a $log_file done < $param_file echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file
這里有個技巧,即使用tee命令,既在console上顯示了訪問日志,也往文件里寫入了記錄。即有人工觀察,也有日志存儲,以備查看。
如此,便實現了大家都不用手動敲數據,從而在這上面犯錯的可能了。 DBA從數據導出格式化數據,shell腳本直接讀取格式化數據,保留記錄。這才是程序該干的事。
一句話,想辦法偷個懶,這是我們該干的事。
但是應該要注意,當一個接口被腳本跑去執行時,你就行考慮并發問題,以服務器的壓問題了,也不要太相信代碼。做最壞的打算。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“shell如何批量curl接口腳本”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。