curlについて学ぶ

この記事は、名古屋の IT 系学生コミュニティ「OthloTech」のアドベントカレンダー

OthloTech Advent Calendar 2018 22 日目の記事です。


どうも、よしかわです。

今回は、タイトルどおり curl コマンドについて触れていきます。

対象読者

  • curl コマンドを学びたい人
  • Web サービスを開発している人
  • Golang で curl コマンドを試してみたい人

目次

このブログでは以下のことを行います。

参考文献

渋川よしき著『Real World HTTP』(オライリー・ジャパン発行)

山本陽平著『Web を支える技術―― HTTP,URI,HTML,そして REST』(技術評論社発行)

curl とは

curl は、1997 年から開発されているツールです。開発者はスウェーデンのDaniel Stenbergです。

curl は、libcurl と curl の 2 つの構成要素から成り立っています。

  • libcurl はクライアントサイド URL 転送ライブラリです。HTTP だけでなく、FTP や LDAP など、様々な通信方式に対応しています。
  • curl は URL シンタックスを用いてファイルを送信または受信するコマンドラインツールです。

curl のバージョン

僕の Mac のデフォルトがこちらでした。

$ curl --version
curl 7.54.0 (x86_64-apple-darwin18.0) libcurl/7.54.0 LibreSSL/2.6.4 zlib/1.2.11 nghttp2/1.24.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy

Homebrew で curl をインストールします。

brew install curl

$ curl --version
curl 7.62.0 (x86_64-apple-darwin18.0.0) libcurl/7.62.0 SecureTransport zlib/1.2.11
Release-Date: 2018-10-31
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

jq のインストール

jq とは、JSON を整形して表示したり集計したり、値を抜き取ったり出来る JSON 用の grep みたいなコマンドです。

マニュアルはこちらから https://stedolan.github.io/jq/manual/

brew install jq

Docker のインストール

今回の記事では、curl コマンドを体感していただくために、Docker を要します。

Docker をインストールしましょう。

Homebrew でイントールするには以下のコマンドを実行します。

brew cask install docker
open /Applications/Docker.app

API を叩いてみる

API を叩くために、まず以下の URL からリポジトリをクローンしてください。

Golang で書かれているため、配置ディレクトリに気をつけてください。

https://github.com/yoshikawataiki/simple-api

git clone git@github.com:yoshikawataiki/simple-api.git

それではワークディレクトリをsimple-apiにして、以下のコマンドを実行します。

Docker が起動していることが前提ですので、ご了承を。

  1. make docker/start
  2. make api/init
  3. make migrate/init
  4. make migrate/up
  5. make run

では curl コマンドで POST してみましょう。

JSON を見やすくするために、| jqをつけています。

curl -X POST -H "Content-Type:application/json" -d '{"name":"yoshikawa","email":"yoshikawa@hoge.com"}' localhost:8080/users | jq

返される値のサンプルは以下です。

{
  "id": 1,
  "name": "yoshikawataiki",
  "email": "yoshi@hoge.com",
  "created_at": "2018-12-22T14:43:51Z",
  "updated_at": "2018-12-22T14:43:51Z"
}

それでは、curl コマンドで GET してみましょう。

curl localhost:8080/users | jq

返される値のサンプルは以下です。

{
  "id": 1,
  "name": "yoshikawataiki",
  "email": "yoshi@hoge.com",
  "created_at": "2018-12-22T14:43:51Z",
  "updated_at": "2018-12-22T14:43:51Z"
}

終わりに

curl コマンドってすごい簡単に POST や GET が出来るんですよ、便利ですね。

こんな雑な記事を最後まで読んでいただきありがとうございました!

23 日目はすぱいすさんです!

僕は現在 3 年生なので、来年卒業論文を書く際にお世話になる記事になること楽しみにしてます!

About the author

モバイルネットワークについて研究をしている。現在、ネットワークが抱えている問題を解決するための技術を研究室独自で開発中。 高校からの親友と2020年に起業することを決めている。また、2020年に自身の会社を立ち上げる予定である。