私は、httpステータスコードを見つけるためにhttpヘッダを取得し、またレスポンスを返すためにcurlを使用します。コマンドでhttpヘッダーを取得します
curl -I http://localhost
応答を得るために、私はコマンドを使います
curl http://localhost
-Iフラグを使用するとすぐに、ヘッダーだけが表示され、応答は表示されなくなります。 1つのコマンドでhttp応答とheaders/httpステータスコードの両方を取得する方法はありますか?
私は使用することを指定しているcurlドキュメントを見ることによって解決策を得ることができました - 出力が標準出力に出力を得るために。
curl -o - http://localhost
Httpリターンコードだけでレスポンスを取得するには、次のようにします。
curl -o /dev/null -s -w "%{http_code}\n" http://localhost
このコマンドを使用して、他の出力なしで状況コードを印刷します。さらに、HEAD要求のみを実行してリダイレクトに従います(それぞれ-I
および-L
)。
curl -o -I -L -s -w "%{http_code}" http://localhost
これにより、ヘルススクリプト内のステータスコードを簡単に確認できます。
sh -c '[ $(curl -o -I -L -s -w "%{http_code}" http://localhost) -eq 200 ]'
詳細モードではすべてがわかります
curl -v http://localhost
私はこれを使用しました:
request_cmd="$(curl -i -o - --silent -X GET --header 'Accept: application/json' --header 'Authorization: _your_auth_code==' 'https://example.com')"
HTTPステータスを取得する
http_status=$(echo "$request_cmd" | grep HTTP | awk '{print $2}')
echo $http_status
レスポンスボディを取得するにはこれを使いました
output_response=$(echo "$request_cmd" | grep body)
echo $output_response
-i
オプションはあなたが望むものです:
curl -i http://localhost
-i、--include出力にプロトコルヘッダを含める(H/F)
あるいは、冗長オプションを使用することができます。
curl -v http://localhost
-v、--verbose操作をより会話的にする
プログラム的な使用法のために、私は以下を使います:
curlwithcode() {
code=0
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
# and sending the content to a file with -o >(cat >/tmp/curl_body)
statuscode=$(curl -w "%{http_code}" \
-o >(cat >/tmp/curl_body) \
"$@"
) || code="$?"
body="$(cat /tmp/curl_body)"
echo "statuscode : $statuscode"
echo "exitcode : $code"
echo "body : $body"
}
curlwithcode https://api.github.com/users/tj
次のような出力が表示されます。
statuscode : 200
exitcode : 0
body : {
"login": "tj",
"id": 25254,
...
}
このコマンド
curl http://localhost -w ", %{http_code}"
コンマ区切りの本文とステータスを取得します。あなたはそれらを取り出すためにそれらを分割することができます。
あなたは好きなように区切り文字を変更することができます。
ユーザーにエラー処理を追加するためにレスポンスとコンテンツの両方が欲しいため、この質問を見つけました。
HTTPステータスコードを印刷して、標準の状態にしてその内容を別のファイルに書き込むことができます。
curl -s -o response.txt -w "%{http_code}" http://example.com
これで、応答を処理する価値があるかどうかを判断するためにロジックを使用しましょう。
http_response=$(curl -s -o response.txt -w "%{http_code}" http://example.com)
if [ $http_response != "200" ]; then
# handle error
else
echo "Server returned:"
cat response.txt
fi