web-dev-qa-db-ja.com

応答とともにhttpステータスコードを返すようにCurl

私は、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 ]'
20
scriptracer

詳細モードではすべてがわかります

curl -v http://localhost
16
ScotchAndSoda

私はこれを使用しました:

    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
11
user2720864

-iオプションはあなたが望むものです:

curl -i http://localhost

-i、--include出力にプロトコルヘッダを含める(H/F)

あるいは、冗長オプションを使用することができます。

curl -v http://localhost

-v、--verbose操作をより会話的にする

4
Owen Pauling

プログラム的な使用法のために、私は以下を使います:

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,
  ...
}
2
edi9999

このコマンド

 curl http://localhost -w ", %{http_code}"

コンマ区切りの本文とステータスを取得します。あなたはそれらを取り出すためにそれらを分割することができます。

あなたは好きなように区切り文字を変更することができます。

2
Tech Junkie

ユーザーにエラー処理を追加するためにレスポンスとコンテンツの両方が欲しいため、この質問を見つけました。

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
2
Eddie