LoginSignup
58

More than 5 years have passed since last update.

curlコマンドを使ってHTTPSのAPIを叩く

Last updated at Posted at 2018-03-18

直にAPIを叩いて挙動を確かめたいときって往々にしてあると思います。
恥ずかしい話、私今まで RestletPostman などを用いてAPIを叩いていて、curlなどのコマンドを用いてAPIを叩いたことがありませんでした。
コマンドでAPIの動作確認ができるように、まとめてみます。

また、今回はhttpsのAPIに焦点を当てて、GETとPOSTの場合を記載します。

環境

Mac OS High Sierra 10.13.3
iTerms2 Build 3.1.5
zsh 5.4.2
Homebrew 1.5.9

利用するコマンド

homebrew のインストール方法は省略。

curl

URLを使用してデータ転送するためのコマンドラインツール。
https://curl.haxx.se/
macに最初から入っているはずだが、なければ下記コマンドでインストール。

$ brew install curl #curlインストール
$ curl --version #curlのバージョン確認

jq

コマンドラインJSONプロセッサ。
curlだけでもAPIは叩けるが、jqを使うとjsonを見やすい形で表示できる。
https://stedolan.github.io/jq/
homebrewでインストールする場合は下記コマンド。

$ brew install jq #jqインストール
$ jq --version #jqのバージョン確認

GET

curlのGETコマンド

$ curl https://xxx.xxx.com/api/ #GETのAPIリクエスト
$ curl -s https://xxx.xxx.com/api/ #`-s`で転送情報の表示を省略する
$ curl -Ss https://xxx.xxx.com/api/ #`-s`はerror情報も省略するが、`-Ss`はerror情報があれば表示
$ curl -v -s https://xxx.xxx.com/api/ #`-v`でheader情報も表示

curlとjqを用いたGETコマンド

※jqはGET以外でも同様に利用できる。

$ curl https://xxx.xxx.com/api/ | jq . #jqでjson表示を見やすく
$ curl https://xxx.xxx.com/api/ | jq '.[]' #配列の中を取り出し表示
$ curl https://xxx.xxx.com/api/ | jq '.[]._id' #`_id`の値の取り出し

GETコマンドで得られる表示情報例

GETコマンドで得られる表示情報を下記にまとめる。

転送情報

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   643  100   643    0     0    635      0  0:00:01  0:00:01 --:--:--   636

header情報

> GET /api/ HTTP/1.1
> Host: my3-restapi.herokuapp.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: Cowboy
< Connection: keep-alive
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Access-Control-Allow-Origin: *
< Content-Length: 591
< Etag: W/"24f-xscLdXNLiD+RodhDRaPEpFIeNxs"
< Date: Sun, 18 Mar 2018 14:52:14 GMT
< Via: 1.1 vegur

GETしたJSON情報

[{"_id":"5a65083f5f5569001498ad60","thing":"あいうえお"},{"_id":"5aae7d0562bd160014c2b28c","thing":"楽天"},{"_id":"5aae886b09adcb0014603652","thing":"かきくけこ"}]

GETしたJSON情報(jq利用)

[
  {
    "_id": "5a65083f5f5569001498ad60",
    "thing": "あいうえお"
  },
  {
    "_id": "5aae7d0562bd160014c2b28c",
    "thing": "かきくけこ"
  }
]

GETしたJSON情報 配列の中を取り出したもの

{
  "_id": "5a65083f5f5569001498ad60",
  "thing": "あいうえお"
},
{
  "_id": "5aae7d0562bd160014c2b28c",
  "thing": "かきくけこ"
}

GETしたJSON情報 _idの値の取り出し

"5a65083f5f5569001498ad60"
"5aae7d0562bd160014c2b28c"

POST

curlのPOSTコマンド

POSTではcurlに下記を付与して利用する。

-X POST #POSTを叩くURLを指定
--data #queryを付与
-d #bodyを付与
-H #headerを付与

コマンドの例を下記に示す。

$ curl --data 'id=xxx&name=sample' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api
$ curl -d '{"result": {"parameters": {"thing": "あいうえお"}}}' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api
$ curl -d '{"result": {"parameters": {"thing": "かきくけこ"}}}' -H "Content-Type: application/json" -X POST https://xxx.xxx.com/api | jq .

※POSTのAPI実行時にレスポンスのheader情報やレスポンス情報が得られて取得、表示される。表示情報はGETと大きく相違ないため、省略する。

まとめ

よく利用するコマンドをまとめると上記のような感じです。
まだまだよく利用するコマンドが他にあると思いますので、あれば教えて欲しいです。
早くcurlコマンドに慣れたいものです。

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
58