質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

27949閲覧

curlのレスポンスで、status_codeとbodyのみを取得したい

umino

総合スコア54

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/01/16 03:58

編集2020/01/16 04:27

前提・実現したいこと

●前提
実装で、「シェルスクリプトで内でcurlし、ステータスコードとレスポンスボディの2つから分岐させる処理」を書いています。
1回のcurlで、ステータスコードとレスポンスボディの2つのみを取得したいのですが、できません。

●できないこと(実現したいこと)
「curlレスポンスにて、ステータスコードとレスポンスボディの2つを取得する」

●できたこと
「ステータスコードのみ取得する」
「レスポンスボディのみ取得する」
「ステータスコード・ヘッダー・レスポンスボディのすべて取得する」

curlコマンドのオプションで実現可能だと一番うれしいのですが、よいオプションや方法がみつけられませんでした。
よい指定方法をご存じの方、ご教示いただけませんでしょうか?

試したこと

1.status_codeのみを取得

$ curl -LI google.com -o /dev/null -w '%{http_code}\n' -s 200

2.bodyのみを取得

$ curl google.com <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>

3.status_codeとbodyの両方を取得(ヘッダーも入ってしまう)

$ curl -Ssi google.com HTTP/1.1 301 Moved Permanently Location: http://www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Thu, 16 Jan 2020 03:28:27 GMT Expires: Sat, 15 Feb 2020 03:28:27 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 219 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML>

取得後、("200","body")のように、リストやタプルのような感じで使用したいイメージです。

curlコマンドのオプションで実現可能だと一番うれしいのですが、よいオプションや方法がみつけられませんでした。
curlにお詳しい方、よい指定方法をご存じの方、知恵をかしていただけませんでしょうか?
よろしくおねがいします。

補足情報(FW/ツールのバージョンなど)

CentOS7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1回のcurlで、ステータスコードとレスポンスボディの2つのみを取得したいです。

以下で最終行にhttp statusが付与されます。

bash

1res=`curl -L google.com -w '\n%{http_code}' -s` 2body=`echo "$res" | sed '$d'` 3httpstatus=`echo "$res" | tail -n 1`

投稿2020/01/16 04:40

編集2020/01/16 05:09
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2020/01/16 07:27

Y.H.さん、さっそくのご回答ありがとうございます。 試してみたところ、まさにこれがほしかった!という情報が取得できました。 シェルスクリプトの書き方までご教示いただいて、大変たすかりました。自信がないもので... おかげさまで実装がすすみました。 本当にありがとうございました。
guest

0

status_codeとbody両方を同時に取る、というのであれば、

shell

1curl google.com -w '%{http_code}'

では不足でしょうか?(出力順番は body, status_codeになりますが)

リスト、またはタプル形式での出力はscript等でcurlした結果を処理してあげる必要がありそうな気がします・・(shell弱者なのでこれ以上何もいえないです・・すみません)

投稿2020/01/16 05:02

yusuken

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umino

2020/01/16 07:32

yusukenさん、ご回答ありがとうございます。 $ curl google.com -w '%{http_code}' <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/">here</A>. </BODY></HTML> 301 で、おっしゃるとおり取得できました。(順序はこだわりないので大丈夫でした) 結果(body)と-wでステータスコードを指定すればいい話でしたね。 やたらややこしく考えてしまって・・・。 大変参考になりました、丁寧なご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問