[英]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.