はじめに
Linuxコマンドの中でかなり深い使われ方をするcURLですが、一般的なGET/POSTリクエスト以外にどういったことができるのかと、調べて自分用にまとめたものです。
過去にも1度記事にしています、対応プロトコルが増えていたので、追記ではなく、新規に記事としています、過去の記事はこちら Curl Ver7.33
基本的にCentOS7でのcurlコマンドの使い方になりますが、部分的にWindows用とMacOSX用の解説を含んでいます。
cURLのインストール
オフィシャルサイト
https://curl.haxx.se/
- Linux版について
大体のLinuxディストリでは標準で入っています、が、バージョンが古いことが多いです。
現状の最新は7.60.0(2018/06/16現在)です。
有名ディストリの標準バージョンですが以下のようになっています
※ディストリビューションの互換については、後述するパッケージをとってきてインストールする場合に使えるかどうかの判断用です。
ディストリ | ディストリVer | cURL Ver | ディストリ互換 |
---|---|---|---|
CentOS | 6.9 | 7.19.7 | Fedora 12,13 |
CentOS | 7.5.1804 | 7.29.0 | Fedora 19,20 |
Fedora | 28 | 7.59.0 | Non |
Debian | 7.11,wheezy | 7.26.0 | Non |
Debian | 8.10,jessie | 7.38.0 | Non |
Debian | 9.4,stretch | 7.52.1 | Non |
Ubuntu | 16.04.4 LTS (Xenial Xerus) | 7.47.0 | Debian jessie,stretch |
Ubuntu | 17.10.1 (Artful Aardvark) | 7.55.1 | Debian jessie,stretch |
Ubuntu | 18.04 LTS (Bionic Beaver) | 7.60.0 | Debian jessie,stretch |
Ubuntu | 18.10 (Cosmic Cuttlefish) | 7.60.0 | Debian stretch,buster |
まあ見てわかる通り、Ububtu以外は最新に追従してません。
といっても、大体の場合、WEBアクセスのクライアントとしてしか使わないことが多いので、Ver 7.30以上あればいいのですけど。
そういう意味だと、CentOSは7でもちょっとCurlは心もとないです。
- Windows版について
Windowsに至っては標準コマンドとして入っていません
導入する場合は、MinGW版が良いです、ProviderがViktor Szakatsのものを選びましょう
※ほかのProviderでもいいのですが、Cygwinベースのものがありますので、ファイルの保存先を指定する場合
/cygdrive/(ドライブレター)/(パス名)/、といった特殊なプレフィクスがついてしまう点に注意が必要です
- Mac版について
一応、Macにも標準で入っているのですが、Derwin(UNIX)のものなので、オプションや挙動が少し違います
※入っているバージョンについては以下のようになっているようです、アップデートの挙動で変わってしまうので、
多少、マイナーバージョンが前後しますが、大体の目安に
Mac OS X Ver | cURL Ver |
---|---|
10.6 | 7.19 |
10.7 | 7.22 |
10.8 | 7.23 |
10.9 | 7.24 |
10.10 | 7.30 |
10.11 | 7.37 |
10.12 | 7.49 |
10.13 | 7.51 |
10.12(sierra)以降については、Homebrewでcurl 7.60までアップデートできます
- cURLの実行時の設定について
基本は、ユーザのホームパス以下に.curlrcという設定が生成され、それを見に行きます。
デフォルトだと、中身の入っていないファイルができます。
以下のような設定をすることができます、コメントに入れていますが、cURLのバージョンで使えないものがありますので注意してください
コメントで###がついているものは、概要・説明等、#が1つだけのものはひな型用にコメントアウトしたものです
### HTTP-Version [curl Ver >= 7.19.2]
http1.0
# http1.1
# http2
# IPv4/IPv6のどちらで名前解決を行うか:[curl Ver >= 7.37.0]
ipv4
# ipv6
### HTTP PROXYの利用:[curl Ver >= 7.19.2]
proxy-user = "(ユーザ名):(パスワード)"
proxy = "http://(アドレス):(ポート)"
### Socks5 PROXYの利用:[curl Ver >= 7.21.7]
proxy-user = "(ユーザ名):(パスワード)"
proxy = "socks5://(アドレス):(ポート)"
### WEBアクセス時のUser-Agentの設定 [curl Ver >= 7.19.2]
### Sony Xperia XZ
# user-agent = "Mozilla/5.0 (Linux; Android 7.1.1; G8231 Build/41.2.A.0.219; wv)"
### Mac OS X 10.13 Safari
# user-agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.31 (KHTML, like Gecko) Version/11.0 Safari/604.1.31"
### Windows10 Firefox
# user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"
### Windows10 Chrome
user-agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"
### Referer の設定
referer = ";auto"
### .netrc の利用可否
# netrc
# netrc-optional
### キープアライブ(秒)
connect-timeout = 300
speed-time = 120
speed-limit = 9000000
### 切断時の自動リトライ数
retry = 4
retry-delay = 5
retry-max-time = 10
### ファイルアップロード時の改行コード変換
# crlf
### FTPコマンド利用時の設定
ftp-create-dirs
ftp-ssl
ftp-pasv
ftp-method = nocwd
### SSL 証明書
### 古いとError (35)がでる、以下のコマンドで最新にする
### curl http://curl.haxx.se/ca/cacert.pem -o /usr/ssl/certs/ca-bundle.crt
### cURLがNSSの場合は書き方が違うので注意、以下はOpenSSLの場合
cacert = /usr/ssl/certs/ca-bundle.crt
capath = /usr/ssl/certs/
### NSSの場合は
### mk-ca-bundle.pl というコマンドがいるはずなので、これを実行すると
### sql:/etc/pki/nssdb が更新される
### SSLの挙動を抑制する [OpenSSL >= 1.0.0 or NSS >= 3.19.1-6]
# insecure
tlsv1
# tlsv1.0
# tlsv1.1
# tlsv1.2
# sslv2
# sslv3
### cookieの利用時の保存パス
cookie-jar = /tmp/.curl_cookies
cookie = /tmp/.curl_cookies
cURLの使い方
コンソールにWEBソースを表示
curl [URL]
WEBのデータをローカルに保存
curl -O [URL] -o [ファイル名(省略するとWEBのファイル名になる)]
WEBのデータを分割ダウンロード
curl -o one.html http://example.com/1 http://example.com/2
Name Virtual HostにHOSTSを書き換えずに直接アクセス
curl -H "Host: www.example.com" http://localhost/
cURLだけで逆引き指定してアクセス
curl --resolve example.com:80:127.0.0.1 http://example.com/
NIC(インターフェース)指定でアクセスする
curl --interface eth1 https://www.example.com/
PASVなどのポート範囲指定のアクセス
curl --local-port 4000-4200 https://example.com/
キープアライブ指定
curl --no-keepalive https://example.com/
curl --keepalive-time 300 https://example.com/
リダイレクト対応しダウンロードを実施
curl -L -O [URL]
HTTPヘッダの確認
curl -I -s [URL]
UserAgent指定
curl -A 'CURL WEB CLI' example.com
リファラ指定
curl -e http://example.com/ http://example.com/targetfile
Cookieを利用
curl -b example.cookie http://example.com/
POSTデータをurlエンコードして送信
curl -d user=hoge --data-urlencode pass='pass&word' http://example.com/
FileをPOSTする場合
curl -F "web=@index.html;type=text/html" url.example.com
SCP/SFTP Download
curl -u [USER]:[PASSWORD] scp://example.com/file.zip
curl -u [USER]:[PASSWORD] sftp://example.com/file.zip
SCP/SFTP upload
curl -T [FILENAME] -u [USER]:[PASSWORD] scp://example.com/UPLOAD_PATH/FILENAME
curl -T [FILENAME] -u [USER]:[PASSWORD] sftp://example.com/UPLOAD_PATH
FTP Upload
curl -T [FILENAME] -u [USER]:[PASSWORD] --ftp-create-dirs -ssl ftp://HOSTNAME/UPLOAD_PATH
FTP Download
curl -u [USER]:[PASSWORD] -O ftp://HOSTNAME/PATH/FILENAME
FTP LIST
curl -u [USER]:[PASSWORD] ftp://[HOSTNAME]/[PATH]/
Samba Upload
curl -T [FILENAME] -u "domain\username:passwd" smb://HOSTNAME/PATH/
Samba Download
curl -u "domain\username:passwd" smb://HOSTNAME/PATH/FILENAME
SMTP(s) メール送信
curl smtp://example.com --mail-from 'from@example.com' --mail-rcpt 'to@example.com' -u 'username:password' -T \
"From: 'xxxxx'
To: 'xxxxx'
Subject: [SUBJECT]
TEST
"
POP3(s) メールボックス確認
curl -u 'username:password' pop3://mail.example.com/
POP3(s) メールを読む
curl -u 'username:password' pop3://mail.example.com/[MAIL No]
POP3(s) メールを消す
curl -u 'username:password' --request DELE pop3://mail.example.com/[MAIL No]
IMAP(s) メールボックス確認
curl -u 'username:password' --url 'imaps://imap.gmail.com:993' -X 'EXAMINE INBOX'
IMAP(s) 一覧取得
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX;'
IMAP(s) 未読/既読一覧取得
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX' -X 'SEARCH UNSEEN'
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX' -X 'SEARCH SEEN'
IMAP(s) メールを読む
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX;UID=(読みたいメールのUID);SECTION=TEXT' | nkf
IMAP(s) 削除フラグ
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX' -X "STORE (メールのUID) +Flags \Deleted"
IMAP(s) 未読化(-Flags \Seen)/既読化(+Flags \Seen)
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX' -X "STORE (メールのUID) -Flags \Seen"
curl -u 'username:password' --url 'imaps://imap.gmail.com:993/INBOX' -X "STORE (メールのUID) +Flags \Seen"
TELNETする
curl -vv telnet://xxx.xxx.xxx.xxx:23
ストリームダウンロード
curl -o sample.mp4 rtmp://live.example.com/live/sample.mp4
LDAP関連、RTSP関連はまた後日追加します。