web-dev-qa-db-ja.com

HTTPからレスポンスヘッダのみを取得する POST カールを使う

curl(1)のオプション-Iとして、HTTP HEADを使ってヘッダだけを要求できます。

$ curl -I /

長いHTMLレスポンスボディはコマンドラインに入るのが面倒なので、POSTリクエストのフィードバックとしてヘッダーのみを取得したいと思います。ただし、HEADとPOSTは2つの異なる方法です。

POSTリクエストへのレスポンスヘッダのみを表示するようにcurlを取得するにはどうすればいいですか?

476
Jonathan Allard
-D, --dump-header <file>
       Write the protocol headers to the specified file.

       This  option  is handy to use when you want to store the headers
       that a HTTP site sends to you. Cookies from  the  headers  could
       then  be  read  in  a  second  curl  invocation by using the -b,
       --cookie option! The -c, --cookie-jar option is however a better
       way to store cookies.

そして

-S, --show-error
       When used with -s, --silent, it makes curl show an error message if it fails.

そして

-L/--location
      (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
      code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from  all  requested
      pages  will  be  shown.  When authentication is used, curl only sends its credentials to the initial Host. If a redirect takes curl to a different
      Host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
      follow by using the --max-redirs option.

      When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
      response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following  request  using  the  same  unmodified
      method.

manページから。そう

curl -sSL -D - www.acooke.org -o /dev/null

リダイレクトに従い、ヘッダを標準出力にダンプし、データを/ dev/nullに送信します(これはPOSTではなくGETですが、POSTでも同じことができます。すでにPOSTデータを使用しています)

-の後の-Dに注意してください。これは、出力 "file"が標準出力であることを示します。

676
andrew cooke

他の回答では、レスポンスボディをダウンロードする必要があります。しかし、ヘッダを取得するだけのPOSTリクエストを作成する方法があります。

curl -s -I -X POST http://www.google.com

-Iは単独でHEAD要求を実行します。これはPOST(またはその他の)要求を実行し、それでもヘッダーデータのみを取得するために-X POSTでオーバーライドできます。

123
siracusa

長いレスポンスボディ(そして他の様々な似たような状況)に対して、私が使う解決策は常にlessにパイプすることです。

curl -i https://api.github.com/users | less

または

curl -s -D - https://api.github.com/users | less

仕事をします。

44
fiatjaf

次のコマンドは追加情報を表示します。

curl -X POST http://httpbin.org/post -vvv > /dev/null

完全な応答ではなく、HEADだけを送信するようにサーバーに依頼することができます。

curl -X HEAD -I http://httpbin.org/

Note:正しく設定/プログラムされたWebサーバーはPOSTではなくHEADリクエストであるため、投稿とは異なる応答をします。しかし、ほとんどの場合うまくいきます

42
zainengineer

はるかに簡単に - これは私が ショートリンクトラッキングを避けるために使用しているものです - 次のとおりです。

curl -IL http://bit.ly/in-the-shadows

…リンクにも続く

15
kaiser

他の答えがすべての状況で私のために働いていない間、私が見つけることができる(同様にPOSTで働く)見つけることができる最良の解決策は here から:

curl -vs 'https://some-site.com' 1> /dev/null

13

ちょっと極端かもしれませんが、私はこのスーパーショートバージョンを使用しています。

curl -svo. <URL>

説明:

-vデバッグ情報を表示します(ヘッダーを含みます)。

-o.は(無視したい)Webページデータを特定のファイル(この場合は.)に送信します。これはディレクトリであり、無効な宛先であり、出力は無視されます。

-sプログレスバーなし、エラー情報なし(それ以外の場合はWarning: Failed to create the file .: Is a directoryが表示されます)

4
exebook