LoginSignup
5
4

More than 5 years have passed since last update.

rails api mode に対してcurl で postした時にはまったので深掘りしていく

Posted at

scaffold で以下の雛形を作成してそこにデータを保存して行く。 何でも屋みたいになってきていて嫌だけど、僕の特技は最短でキャッチアップしてそれっぽいもの作ることなのでまぁ苦ではないんだけど、、、

4月には何をどうするか決めて、それ以外の余計なものをできるだけ減らしていこうと思う。あとは色々な人にあって話して、方向性決めて行こう。

curl -H "Content-Type: application/json" -d '{"user":{"name": "u-kan", "body": "bodybody"}}' http://localhost:3000/users

一応解説

curl

terminalからhttpリクエストを送信する。超便利。

-H オプション

ヘッダを追加できる。これ必須。恐らく、rails内部でのencoding処理とかが少し変わってくるんだと思う。

Content-Type: application/json

実験

# content-typeを指定した場合のserver側で受け取ったhash
{"user"=>{"name"=>"u-kan", "body"=>"bodybody"}}

# 指定しなかった場合
{"{\"user\":{\"name\": \"u-kan\", \"body\": \"bodybody\"}}"=>nil}

content-typeによって処理が違うらしい。ここで疑問。

curl でPOSTした場合の defaultのcontent-typeって何?

以下のコマンドを叩くと、curlコマンドを叩いた時のログを特定のfileに出力できる。 --trace-asciiの他のオプションに、--traceってのもあるんだけどこっちだとbinaryが出力されちゃうので注意。(参考:curlコマンドの使い方

curl -d '{"user":{"name": "u-kan", "body": "tarou"}}' http://localhost:3000/users --trace-ascii tmp.log

結果の一部はこんな感じ。

tmp.log
Content-Type: application/x-www-form-urlencoded

どうやらx-www-form-urlencodedってのがdefaultっぽい。こいつが何者か調べて見ると、広く使われてるけど結構仕様が固まってないフォーム提出形式の1種らしい。

とりあえず、理由はぐぐってもなかなかでてこないんだけど、忘れずに指定すればおっけー

泣き言なのですが、これの理由がわからないので、誰か教えてくださるととても助かります。。泣

-d オプション

これは送るデータを指定できる。ファイルを送ったりもできるし色々便利っぽいけど、疲れちゃったのでまた今度

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4