簡體   English   中英

用於捕獲Curl HTTP狀態代碼和主體響應的正則表達式

[英]Regex for capturing Curl HTTP Status Code and body response

我試圖創建一個捕獲HTTP狀態代碼以及curl請求主體的正則表達式。 下面的正則表達式模式可在多個在線站點上運行,但在Mac的命令行上的shell if語句中無法匹配。 我的正則表達式關閉了嗎?

RESPONSE=$(curl -s -i -X GET http://www.google.com/)

# Match and capture the status code, match the headers, match two new lines, match and capture an optional body
re="^HTTP\/\d\.\d\s([\d]{3})[\w\d\s\W\D\S]*[\r\n]{2}([\w\d\s\W\D\S]*)?$"

if [[ "${RESPONSE}" =~ $re ]]; then
  echo "match"
  # Now do stuff with the captured groups, "${BASH_REMATCH[...]}"
else
  echo "no match"
fi

我也樂於接受其他方法(我的目標是運行CentOS 5的計算機)。

與@delarsschneider的想法相同,稍微復雜一點

RESPONSE=$(curl -s -i -X GET http://www.google.com/)

CODE=$(echo $RESPONSE | sed -n 's/HTTP.* \(.*\) .*/\1/p')

BODY=$(echo $RESPONSE | tr '\n' ' ' | sed -n 's/.*GMT *\(.*\)/\1/p')

echo $CODE
echo $BODY

由於您也可以使用其他解決方案,因此可以嘗試一下。

RESPONSE=$(curl -s -i -X GET http://www.google.com/)

HTTP_STATUS_CODE=`echo $RESPONSE | sed '
  /HTTP/ { 
    s/^HTTP[^ ]* //
    s/ .*$//
    q
  }
  D'`

BODY=`echo $RESPONSE | sed '
  /^.$/ {
    :body
    n
    b body
  }
  D'`

echo $HTTP_STATUS_CODE
echo $BODY

在以HTTP開頭的第一行中找到HTTP_STATUS_CODE 刪除第一個空格之前的每個非空格,並從結果(找到“ 302找到”)中刪除從第一個空格到行尾的所有內容。

BODY從與單個字符匹配的第一行開始(之前的行用'D'刪除)。 從這里開始打印每一行,直到輸入結束。

暫無
暫無

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

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