curlを使用してhttpヘッダーを取得し、httpステータスコードを検索して、応答も返します。コマンドでhttpヘッダーを取得します
curl -I http://localhost
応答を取得するには、次のコマンドを使用します
curl http://localhost
-Iフラグを使用するとすぐに、ヘッダーのみが取得され、応答はありません。1つのコマンドでhttp応答とheaders / httpステータスコードの両方を取得する方法はありますか?
curlを使用してhttpヘッダーを取得し、httpステータスコードを検索して、応答も返します。コマンドでhttpヘッダーを取得します
curl -I http://localhost
応答を取得するには、次のコマンドを使用します
curl http://localhost
-Iフラグを使用するとすぐに、ヘッダーのみが取得され、応答はありません。1つのコマンドでhttp応答とheaders / httpステータスコードの両方を取得する方法はありますか?
回答:
-
stdoutへの出力を取得するために出力に使用するように指定しているcurl docを見て解決策を得ることができました。
curl -o - http://localhost
httpリターンコードだけで応答を取得するには、次のようにします
curl -o /dev/null -s -w "%{http_code}\n" http://localhost
-i
。または、-v
いくつかの追加情報が必要な場合もあります。
-o -I
-I
CWDに文字通り ' ' という名前のファイルを作成することになります。他の誰かがこれを見ていますか?そのためのソリューションは、-o/dev/null -I
冗長モードはすべてを教えてくれます
curl -v 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 -o -I -L -s -w "%{http_code}" http://localhost
ファイルが呼び出さ作成され-I
、この私がで暗示ファイル出力のための場所を追加周りを取得するために、-o
すなわち、行くために/dev/null
:curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
ユーザーにエラー処理を追加するために、応答とコンテンツの両方が必要だったため、この質問を見つけました。
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
-i
オプションでは、あなたがしたいということです。
curl -i http://localhost
-i、--include出力にプロトコルヘッダーを含めます(H / F)
または、冗長オプションを使用できます。
curl -v http://localhost
-v、--verbose操作をよりおしゃべりにする
私はこれを使用しました:
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
プログラムで使用する場合は、次のように使用します。
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,
...
}
これは、ステータスコード「および」を取得し、適切なjsonまたは適切なフォーマットにフォーマットする方法です。書き込み形式オプションの誤った使用だと主張する人もいますが、スクリプトで本文とステータスコードの両方を使用してステータスコードをチェックし、サーバーからの応答を中継する必要がある場合に役立ちます。
curl -X GET -w "%{stderr}{\"status\": \"%{http_code}\", \"body\":\"%{stdout}\"}" -s -o - “https://github.com” 2>&1
上記のコードを実行すると、次の形式でjsonが返されます。
{
"status" : <status code>,
"body" : <body of response>
}
-w write formatオプションを使用すると、stderrが最初に出力されるため、出力をvar http_codeでフォーマットし、応答の本文を値(body)に配置して、var stdoutを使用して囲みを追跡できます。次に、stderr出力をstdoutにリダイレクトすると、http_codeと応答本文の両方をきちんとした出力に組み合わせることができます
curl: unknown --write-out variable: 'stderr'
およびcurl: unknown --write-out variable: 'stdout'
これを達成するための私の方法:
両方(ヘッダーと本文)を取得するには、通常、次のようにa curl -D- <url>
を実行します。
$ curl -D- http://localhost:1234/foo
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 20:59:21 GMT
{"data":["out.csv"]}
これは、(ヘッダをダンプします-D
STDOUT(に)-
)(のためのルック--dump-header
で男カール)。
私見もこの文脈で非常に便利です:
私はよくjqを使用して、jsonデータ(たとえば、いくつかのREST APIから)をフォーマットします。ただし、jqはHTTPヘッダーを想定していないため、トリックを使用してヘッダーをstderrに出力し-D/dev/stderr
ます。今回は-sS
(--silent、--show-errors)も使用して、進行状況メーターを抑制していることに注意してください(パイプに書き込むため)。
$ curl -sSD/dev/stderr http://localhost:1231/foo | jq .
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:08:22 GMT
{
"data": [
"out.csv"
]
}
これは、ヘッダーを(クイックインスペクションのために)コンソールに出力し、本体をファイルにリダイレクトする場合(たとえば、ある種類のバイナリが端末を台無しにしない場合)にも便利です。
$ curl -sSD/dev/stderr http://localhost:1231 > /dev/null
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:20:02 GMT
注意:これはと同じではありませんcurl -I <url>
。-I
実行されますHEAD
要求していないGET
ため、要求(ルック--head
で男カールほとんどのHTTPサーバーでは、これは同じ結果が得られます。しかし、私は実装しないビジネスアプリケーションの多くを知っている:はい。HEAD
すべての;-Pで要求を