コマンドラインツール curl 調査ノート
ファイル転送ツール curl
に関する調査ノート。
未整理利用例
まずはネットから利用例をかき集めて観察しよう。man curl
を分析するのはその後だ。
以下、HTTP/HTTPS での用例かつダウンロード方向の転送のものを扱いたい。
bash$ curl --version # とにかく細かいバージョン情報
bash$ curl --help # ヘルプを表示
定番オプション。
bash$ curl https://www.example.com # HTTP GET request
bash$ curl --request GET https://example.com # 同じく
bash$ curl -I https://www.example.com # HTTP HEAD request
オプションなし URL 指定のみの呼び出しがいちばん基本的だ。ファイルの中身を標準出力に書き出す。
bash$ curl http://site.{one,two,three}.com
bash$ curl http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
bash$ curl http://www.numericals.com/file[1-100:10].txt
bash$ curl http://www.letters.com/file[a-z:2].txt
URL の一部に [-]
や {,,,}
による範囲指定や要素指定をして、一度に複数のファイルを転送することができる。
- 十分新しい
curl
では Python のリストのようにスライスもできる。
bash$ xargs -n 1 curl -O < listurls.txt # URL が書かれたテキストファイル
wget
の --input-file
のようなオプションがないので、こうするしかない?
bash$ curl -o myfile.css https://cdn.keycdn.com/css/animate.min.css # ディスクに名前を付けて保存
bash$ curl -O https://cdn.keycdn.com/css/animate.min.css # ディスクに保存
オプション -o/--output FILE
はダウンロードしたファイルをローカルディスク FILE
に保存する。
一方、オプション -O/--remote-name
はリモートにあるファイル名を活かしてローカルディスクに保存する。
この系譜に連なるオプションとして --remote-name-all
というのもある。
bash$ curl -C - -O https://cdn.keycdn.com/img/cdn-stats.png # how to resume
bash$ curl --limit-rate 200K -O https://cdn.keycdn.com/img/cdn-stats.png # 転送速度
bash$ curl -r 0-20000 -o myfile.png https://cdn.keycdn.com/img/cdn-stats.png # ファイルの一部をダウンロード
オプション -C/--continue-at OFFSET
は停止していたファイル転送を再開させる。
問題は引数 OFFSET
だが、バイト数指定をするらしい。
利用例のように -
を指定することで再開場所を curl
に特定させることができる。
オプション --limit-rate SPEED
で転送速度を指定する。単位は一秒あたりのバイト数。
- 数字の後に
K
,M
,G
を付けるとスケールを指定できる。
オプション -r/--range RANGE
で指定ファイルのバイト的部分列を得ることができる。
範囲の指定方法は色々あるのでマニュアルを参照。
- カンマを使って複数の範囲を指定すると、リクエスト回数がそのぶん増えるようだ。
- 巨大ファイル用オプション。
bash$ curl --request GET https://www.example.com/
bash$ curl --request POST https://www.example.com/
bash$ curl --request DELETE https://www.example.com/
bash$ curl --request PUT https://www.example.com/
オプション -X/--request METHOD
で HTTP リクエスト。
bash$ curl -z 21-Dec-11 http://www.example.com/yy.html
bash$ curl -z -21-Dec-11 http://www.example.com/yy.html
オプション -z/--time-cond DATE-EXPRESSION
は、ファイルの更新日時が特定のものより前後か否かで転送するかどうかを決定する。
日付文字列の直前に -
を付けるほうが「古いものが欲しい」。
- 日付の書式は別途文書を参照すること。
bash$ curl -# -o URL # メーターの代わりにプログレスバー
bash$ curl --silent URL # 何もエコーしない
オプション -#/--progress-bar
で転送時の進捗表現をメーターからプログレスバーに代える。
一方、オプション -s/--silent
は進捗を表示しない。
- なお、コマンドライン上で文字列
-#
の末尾以降はコメントとみなされない。