簡體   English   中英

cURL Bash將響應正文保存到文件

[英]cURL Bash save response body to file

我已經在bash中創建curl了,在這里我想通過調用函數save_log()將其保存為日志文件,但是當我打開txt文件時,它只是顯示我僅執行 ,而標頭代碼響應正文為空(空)

這是我的腳本:

SECRET_KEY='lolz'
FILE_NAME="test.txt"


function save_log()
{
  printf '%s\n' \
    "Header Code  : $1" \
    "Executed at  : $(date)" \
    "Response Body  : $2" \
    "====================================================================================================="$'\r\n\n'  >> output.log
}

# while IFS= read -r line; do
while IFS= read -r line || [[ -n "$line" ]]; 
    do
      HTTP_RESPONSE=$(curl -L -w "HTTPSTATUS:%{http_code}" -H "X-Gitlab-Event: Push Hook" -H 'X-Gitlab-Token: '$SECRET_KEY --insecure $line 2>&1) &
      HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g') &
      HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://') &
      echo $HTTP_RESPONSE
      save_log "$HTTP_STATUS" "$HTTP_BODY" &
done < $FILE_NAME

這是輸出

    Header Code  : 
    Executed at  : Mon Jul 1 07:01:40 WIB 2019
    Response Body  : 
    =====================================================================================================

有人可以幫我嗎?

只需刪除控制操作 & ,迫使你的命令在后台運行,並異步自己的腳本控制流。

這將導致不帶任何參數調用save_log()函數(因為它們在后台,並且在您調用save_log()時可能甚至沒有完成)。

我進行了測試,並且可以正常工作(我不知道您的FILE_NAME上有哪些URL,所以我只添加了一些隨機URL):

SECRET_KEY='lolz'
FILE_NAME="test.txt"


function save_log()
{
  printf '%s\n' \
    "Header Code  : $1" \
    "Executed at  : $(date)" \
    "Response Body  : $2" \
    "====================================================================================================="$'\r\n\n'  >> output.log
}

# while IFS= read -r line; do
while IFS= read -r line || [[ -n "$line" ]]; 
    do
      HTTP_RESPONSE=$(curl -L -w "HTTPSTATUS:%{http_code}" -H "X-Gitlab-Event: Push Hook" -H 'X-Gitlab-Token: '$SECRET_KEY --insecure $line 2>&1)
      HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
      HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
      echo $HTTP_RESPONSE
      save_log "$HTTP_STATUS" "$HTTP_BODY"
done < $FILE_NAME

輸出:

Header Code  : 200
Executed at  : Sun Jun 30 18:05:12 UTC 2019
Response Body  : <!DOCTYPE html> (...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM