curl使い方についてまとめてみた
今回はcurlの使い方について調べてみました。今までAPIのアクセステストとかに使っていましたが、ちゃんと調べたことなかったので、この際調べてみようということで記事にしました。
curlとは?
ドキュメントから拝借すると、
curl is used in command lines or scripts to transfer data. curl is also libcurl, used in cars, television sets, routers, printers, audio equipment, mobile phones, tablets, medical devices, settop boxes, computer games, media players and is the Internet transfer engine for countless software applications in over twenty billion installations.
ということで
- データを転送するためのコマンドラインツールおよびスクリプトである
- 車からテレビ、ルーターまでありとあらゆるところで利用されている
- 無数のソフトウェアのためのインターネット転送エンジンである
みたいです。インターネットあるところにcurlあるといった感じでしょうか(多分大袈裟ではないですね)。
具体的な仕様についていかにざっくりまとめてみます(一部省略しています)。
- 対応プロトコル
- FTP(S)、HTTP(S)、IMAP(S)、POP3(S)、SMTP(S)、WS(S)
- プロキシ
- HTTP(S)、tunneling、SOCKS4(5)
- HTTP
- GET、POST、PUT、HEADなど
- Auth
- Basic、Plain、Digest、Kerberos
- HTTP圧縮
- gzip、brotil、zstd
ちなみにcurlの読み方はカールということです(エンジニアなりたての時は合ってるかわからずシーURLと呼んでいた時期がありましたw)。
使い方まとめ
curlのチュートリアルに沿ってまとめてみます。
シンプル編
- Webサーバからメインページ取得:
curl https://www.example.com/
- READMEをFTPサーバから取得:
curl ftp://ftp.example.com/README
- Webページを8000ポートで取得:
curl http://www.example.com:8000
- FTPサイトのディレクトリ一覧を取得:
curl ftp://ftp.example.com
- 辞書サーバにアクセスして
curl
にマッチするもの一覧取得:curl dict://dict.example.com/m:curl
- 辞書サーバにアクセスしてcurlの定義を取得:
curl dict://dict.example.com/d:curl
- 同時に二つのドキュメントを取得する:
curl ftp://ftp.example.com/ http://www.example.com:8000
- FTPSサーバからファイルを取得:
curl ftps://files.are.example.com/secrets.txt
- より適切にアクセスする:
curl --ssl-reqd ftp://files.are.example.com/secrets.txt
-
--ssl-reqd
はSSL/TLSを強制させるためのオプション
- より適切にアクセスする:
- SFTPを利用してSSHサーバからファイルを取得:
curl -u username sftp://example.com/etc/issue
ダウンロード編
- webページを指定した名前で保存:
curl -o thatpage.html http://www.example.com
- webページをリモートサーバ上のファイル名と同じ名前で保存:
curl -O http://www.example.com/index.html
パスワード利用編
- ユーザ名とパスワードを利用してFTPを利用:
curl ftp://name:passwd@ftp.server.example:port/full/path/to/file
- または
-u
オプションを利用すると次のようになる:curl -u name:passwd ftp://ftp.server.example:port/full/path/to/file
- HTTPでも利用可能:
curl http://name:passwd@http.server.example/full/path/to/file
- または
プロキシ編
- HTTPプロキシを利用してmy-proxyという名前のプロキシの888ポートを経由してFTP利用:
curl -x my-proxy:888 ftp://ftp.example.com/README
- HTTPサーバからユーザ名とパスワードが必要な場合:
curl -u user:passwd -x my-proxy:888 http://www.example.com/
レンジ編
- ドキュメントから最初の100バイトのデータを取得する:
curl -r 0-99 http://www.example.com/
- 後半の100バイトを取得する:
curl -r -100 http://www.example.com/
- 後半の100バイトを取得する:
アップロード編
- FTPサーバに標準入力データをアップロード:
curl -T - ftp://ftp.example.com/myfile
- 特定のファイルをユーザ名とパスワードでログインしてアップロード:
curl -T uploadfile -u user:passwd ftp://ftp.example.com/myfile
POSTメソッド
- nameとphomeをゲストブックにPOSTする例:
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.example.com/guest.cgi
まとめ
今回はcurlコマンドについて調べてみました。できることが大量にあることはわかっていましたが、大量のプロトコルに対応しており、どれも使ったことがないものばっかりでした。今後、試しにFTPサーバなどを立ててみて実際に使ってみたいと思います。こんなコマンド使ってるよという紹介があればぜひコメントお待ちしてます。
Discussion