シェルを使用したHTTP応答の解析

シェルを使用したHTTP応答の解析

次のHTTP応答を解析したいのですが、単一のカール要求を使用して値を個別にgrepする方法はわかりません。

両方の出力が必要です。 1. status_code - (HTTP ステータスコード配列) 2. 例外Msg - (変数で例外が発生する)

 HTTP/1.1 100 Continue

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=utf-8
    Content-Length: 173
    Connection: close

    {"RemoteException":{"exception":"IllegalArgumentException","javaClassName":"java.lang.IllegalArgumentException","message":"Failed to parse \"false?op=CREATE\" to Boolean."}}

私はこれを試しました

curl -i  -X PUT -T test1.txt "http request"| grep HTPP
curl -i  -X PUT -T test1.txt "http request" | grep Exception

1つのコマンドでこれをどのように実行できますか?

答え1

grep正規表現がサポートされます。例:

curl -i  -X PUT -T test1.txt "http request"|  grep -E "(HTTP|Exception)"

答え2

カール出力を一時ファイルに保存し、ステータスコードをインポートしてからファイルを削除できます。

...
# put response in a temporary file
curl -i http://www.example.com -o response.html

# initialise array to hold status_codes in
status_codes=()

status_codes+=$(sed -n "1p" response.html | grep -o "[[:digit:]]\{3\}")
status_codes+=($(sed -n "3p" response.html | grep -o "[[:digit:]]\{3\}"))
#                       ^ change this to the line numnber where the reponse code is

# print status_codes array (you probably want to comment this out)
declare -p status_codes

rm response.html

関連情報