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

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

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

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

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

Q&A

解決済

1回答

10399閲覧

curlでPOST時にresponseのbodyを出力する方法

kuuritar

総合スコア38

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

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

0グッド

0クリップ

投稿2019/03/22 05:43

編集2019/03/22 05:59

curlで-XPOST時にresponseのbodyを出力する方法はありませんでしょうか?

こちらの記事を参考に色々と試してみましたが、できませんでした。
https://qiita.com/yasuhiroki/items/a569d3371a66e365316f

GETで叩いときには普通に出力されると思うのですが、POST時には何も出力されず困っています。
(長いjsonが返ってくる想定です)

エラー時には正しくエラーコードとエラーメッセージが返ってきています。(当然ですが)

すみません、情報不足でした。
試したコマンドは以下になります。

通常のcurl
curl -XPOST URL

-i -s
curl -i -s -XPOST URL

--trace-ascii
curl --trace-ascii -XPOST URL

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

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

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

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

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

CHERRY

2019/03/22 05:57

具体的には、どのようなコマンドを実行されたのでしょうか?
otn

2019/03/22 09:05

POSTのデータ無しで、ちゃんと結果が返るんでしょうか?
kuuritar

2019/03/22 09:11

はい。 私が作ったものでは無いのですが、少々変わったAPIでして、POSTでしか叩けませんが、データを返す(本来であればGETで組むような)APIなのです。
guest

回答1

0

ベストアンサー

試されているのは、POST したらレスポンスボディが返ってくる URL なのでしょうか?


たとえば、以下のようなPOSTデータをエコーバックする内容の index.php を用意して

<?php echo "<html><body><dl>\n"; foreach ( $_POST as $k => $v ){ echo "<dt>" . $k . "</dt>\n"; echo "<dd>" . $v . "</dd>\n"; } echo "</dl></body></html>\n";

作成した index.php をWebサーバに設置して、index.php の URL に対して、--data 'foo=bar' のようにパラメータをつけて、POST するとどうなるでしょうか?

これで表示されるのであれば、試している URL が、レスポンスボディを返していないのだと思います。

例:テスト環境で試した例

curl -sS -v -XPOST 'http://example.jp/index.php' --data "foo=bar" * Trying 192.168.100.199... * TCP_NODELAY set * Connected to example.jp (192.168.100.199) port 80 (#0) > POST /index.php HTTP/1.1 > Host: example.jp > User-Agent: curl/7.54.0 > Accept: */* > Content-Length: 10 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 10 out of 10 bytes < HTTP/1.1 200 OK < Date: Fri, 22 Mar 2019 06:13:20 GMT < Server: Apache < X-Powered-By: PHP/7.2.15 < Content-Length: 66 < Content-Type: text/html; charset=UTF-8 < <html><body><dl> <dt>foo</dt> <dd>bar</dd> </dl></body></html> * Connection #0 to host example.jp left intact

投稿2019/03/22 06:19

CHERRY

総合スコア25171

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

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

kuuritar

2019/03/22 06:25

はい、responseのbodyが返ってくるのは間違い無いです。 PHPではなくRubyですが、プログラムからhttpリクエストを送るとresponse.bodyにjsonが入った形で返ってきます。 ちなみにcurlを叩き、200の場合は標準出力には何も表示されません。 また、POSTMAN等のhttpリクエストを行ってくれるアプリケーションを利用すると正しくresponse.bodyが返ってきます。
CHERRY

2019/03/22 06:46 編集

なるほど。 他では受け取れて、bash 上の curl だけが受け取れないということですね。 他のアプリで受け取れていること等は、かなり重要な内容なので質問にも記載しておいた方が良いと思います。 お使いの環境が不明ですが、こちらでは、1MB のテキストを POST して、エコーバックさせてみましたが、回答に書いたオプションの ` curl -sS -v -XPOST 'http://example.jp/index.php' ` で、問題なく bash 上で表示されます。 また、試されている URL が、インターネット上で公開されている API 等であれば、API のドキュメント等を質問に記載していただいた方が良いかもしれません。
kuuritar

2019/03/22 09:10

ありがとうございます。 一般公開されているAPIではなく、また私が作成したものでも無いのです。。。 少し時間がかかりますが、一旦向こうの原因かこちらの原因かの線引きをするためにも、ログの調査を依頼してみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問