- 1 curlコマンドとは?
- 2 環境
- 3 基本的な使い方
- 4 ファイルを保存する方法
- 5 HTTPヘッダのみ表示する方法(-I)
- 6 proxy経由でアクセスする方法(-X)
- 7 GET,POST,PUT,DELETEの使い方
- 8 プログレスメータの出力やエラー出力
- 9 指定したTLSバージョンでアクセスする方法
- 10 ftpサーバのディレクトリリストを取得する方法(-l)
- Z 参考情報
1 curlコマンドとは?
ファイルのダウンロードやアップロードを行うためのコマンドです。
2 環境
2.1 ネットワーク構成
サーバとクライアントの2台構成です。図中のeth0はNICの名前です。また、ホスト名の下はIPv4,IPv6アドレス(リンクローカルアドレス)を表しています。
client(eth0) -----------------------------------------(eth0) server 192.168.122.181 192.168.122.216 fe80::41c0:1283:fe8c:ef3b/64 fe80::1f5d:b4c1:979d:359f/64
2.2 版数
サーバとクライアントのCentOS版数は以下のとおりです。
[root@server ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
curlの版数は以下のとおりです。
[root@server ~]# curl -V curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.44 zlib/1.2.7 libidn/1.28 libssh2/1.8.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
3 基本的な使い方
www.example.comにアクセスしてみます。サーバ、クライアントどちらで実行しても構いません。ここでは、クライアントで実行してみます。なお、www.example.comは、ドキュメントに例示用として使えるドメインとして、RFC2606で予約されています。
[root@client ~]# curl https://www.example.com <!doctype html> <html> <head> <title>Example Domain</title> -snip-
4 ファイルを保存する方法
4.1 リモートのファイル名で保存する方法(-O)
理研のサーバからbcパッケージをダウンロードしてみます。bcパッケージを選択した理由は、ファイルサイズが小さく、確認が早く終わるからです。
[root@client ~]# curl -O http://ftp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bc-1.06.95-13.el7.x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 114k 100 114k 0 0 953k 0 --:--:-- --:--:-- --:--:-- 962k
ダウンロードしたbcパッケージを確認します。理研のサーバで保存されていたファイル名でダウンロードできたことがわかります。
[root@client ~]# ls -l bc-1.06.95-13.el7.x86_64.rpm -rw-r--r--. 1 root root 117272 7月 6 21:18 bc-1.06.95-13.el7.x86_64.rpm
4.2 任意の名前を付けて保存する方法(-o)
bcパッケージをtest.rpmという名前で保存してみます。
[root@client ~]# curl -o test.rpm http://ftp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bc-1.06.95-13.el7.x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 114k 100 114k 0 0 880k 0 --:--:-- --:--:-- --:--:-- 887k
ダウンロードしたbcパッケージを確認します。 test.rpmという名前でbcパッケージが保存されたことがわかります。
[root@client ~]# ls -l test.rpm -rw-r--r--. 1 root root 117272 7月 6 21:21 test.rpm
4.3 複数ファイルをダウンロードする方法
複数ファイルを一括でダウンロードする場合、curl -O URL1 -O URL2として実行します。
root@client ~]# curl -O http://ftp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bcc-0.10.0-1.el7.x86_64.rpm -O http://f tp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bcc-devel-0.10.0-1.el7.x86_64.rpm % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 566k 100 566k 0 0 1397k 0 --:--:-- --:--:-- --:--:-- 1396k 100 67632 100 67632 0 0 1431k 0 --:--:-- --:--:-- --:--:-- 1431k
ダウンロードしたbccパッケージを確認します。
root@client ~]# ls -l bcc-* -rw-r--r--. 1 root root 580524 7月 6 21:27 bcc-0.10.0-1.el7.x86_64.rpm -rw-r--r--. 1 root root 67632 7月 6 21:27 bcc-devel-0.10.0-1.el7.x86_64.rpm
5 HTTPヘッダのみ表示する方法(-I)
[root@client ~]# curl -I https://www.example.com HTTP/1.1 200 OK Content-Encoding: gzip Accept-Ranges: bytes Age: 413874 Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 Date: Wed, 06 Jul 2022 12:33:00 GMT Etag: "3147526947" Expires: Wed, 13 Jul 2022 12:33:00 GMT Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT Server: ECS (sab/56F3) X-Cache: HIT Content-Length: 648
6 proxy経由でアクセスする方法(-X)
クライアントからサーバのproxy server経由で東京都のHPにアクセスしてみます。構成は以下のとおりです。
6.1 事前準備
ncコマンドを使って、proxyサーバを起動します。proxyサーバは8080番ポートでListenするようにします。ncコマンドの使い方は、ncコマンドの使い方(ネットワーク実験の幅が広がるなぁ~) - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# nc -l 8080 --proxy-type http
ncプロセスがListenしているポート番号を確認します。ncプロセスはTCPの8080番ポートでListenしていることがわかります。なお、lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsof -c nc -a -i -a -nP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 1177 root 3u IPv6 28514 0t0 TCP *:8080 (LISTEN) nc 1177 root 4u IPv4 28515 0t0 TCP *:8080 (LISTEN)
proxyサーバがListenするポート番号を開放します。firewall-cmdの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# firewall-cmd --add-port=8080/tcp success
ポートの状態を確認します。8080番ポートが解放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 8080/tcp
6.2 実行結果
クライアントからproxyサーバ経由で東京都のHPにアクセスしてみます。
[root@client ~]# curl -x http://192.168.122.216:8080 https://www.metro.tokyo.lg.jp/ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>東京都公式ホームページ</title> -snip-
7 GET,POST,PUT,DELETEの使い方
7.1 事前準備
サーバにHTTPサーバ(json-server)をインストールします。
[root@server ~]# yum -y install npm [root@server ~]# npm install -g json-server [root@server ~]# json-server -v 0.17.0
id,ベンダー、PCを組みにしたデータを作成します。
[root@server ~]# vi db.json [root@server ~]# cat db.json { "pc": [ { "id": 1, "fujitsu": "fmv" }, { "id": 2, "nec": "lavie" } ] }
json-serverを起動します。 json-serverの起動ログより、json-serverのは3000番ポートでListenしていることがわかります。
[root@server ~]# json-server -H 192.168.122.216 --watch db.json \{^_^}/ hi! Loading db.json Done Resources http://192.168.122.216:3000/pc Home http://192.168.122.216:3000 Type s + enter at any time to create a snapshot of the database Watching...
json-serverは、nodeというプロセス名でTCPの3000番ポートでListenしていることがわかります。
[root@server ~]# lsof -c node -a -i -a -nP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 1233 root 22u IPv4 21992 0t0 TCP 192.168.122.216:3000 (LISTEN)
TCPの3000番ポートを解放します。
[root@server ~]# firewall-cmd --add-port=3000/tcp success
ポート番号の状態を確認します。3000番ポートが解放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 3000/tcp
7.2 GETの使い方
GETメソッドを使ってデータを読み出してみます。
[root@client ~]# curl http://192.168.122.216:3000/pc [ { "id": 1, "fujitsu": "fmv" }, { "id": 2, "nec": "lavie" } ][root@client ~]#
7.3 POSTの使い方(追加)
POSTメソッドを使ってデータを追加してみます。追加データは-dで指定します。
[root@client ~]# curl -X POST http://192.168.122.216:3000/pc -d toshiba=dynabook { "toshiba": "dynabook", "id": 3 }[root@client ~]#
[root@client ~]# curl http://192.168.122.216:3000/pc [ { "id": 1, "fujitsu": "fmv" }, { "id": 2, "nec": "lavie" }, { "toshiba": "dynabook", "id": 3 } ][root@client ~]#
7.4 PUTの使い方(更新)
PUTメソッドを使って、fujitsuのPCをfmvからPRIMERGYに更新してみます。更新するデータは-dで指定します
[root@client ~]# curl -X PUT http://192.168.122.216:3000/pc/1 -d fujitsu=PRIMERGY { "fujitsu": "PRIMERGY", "id": 1
更新したデータを確認します。fujitsuのPCがfmvからPRIMERGYに更新されたことがわかります。
[root@client ~]# curl http://192.168.122.216:3000/pc [ { "fujitsu": "PRIMERGY", "id": 1 }, { "id": 2, "nec": "lavie" }, { "toshiba": "dynabook", "id": 3 } ][root@client ~]#
7.5 DELETEの使い方(削除)
DELETEメソッドを使って、idが3のデータをしてみます。更新データは-Xで指定します。
[root@client ~]# curl -X DELETE http://192.168.122.216:3000/pc/3
データを確認します。idが3のデータが削除されたことがわかります。
[root@client ~]# curl http://192.168.122.216:3000/pc [ { "fujitsu": "PRIMERGY", "id": 1 }, { "id": 2, "nec": "lavie" } ][root@client ~]#
8 プログレスメータの出力やエラー出力
8.1 出力方法(-#)
[root@server ~]# curl -# -O http://ftp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bc-1.06.95-13.el7.x86_64.rpm ######################################################################## 100.0%
8.2 抑止方法(-s)
[root@server ~]# curl -s -O http://ftp.riken.jp/Linux/centos/7.9.2009/os/x86_64/Packages/bc-1.06.95-13.el7.x86_64.rpm [root@server ~]#
9 指定したTLSバージョンでアクセスする方法
TLS1.2でwww.example.comにアクセスしてみます。
[root@server ~]# curl --tlsv1.2 https://www.example.com <!doctype html> <html> <head> <title>Example Domain</title> -snip-
10 ftpサーバのディレクトリリストを取得する方法(-l)
[root@server ~]# curl -l ftp://ftp.riken.go.jp/Linux/ubuntu/ ubuntu dists indices pool project ls-lR.gz
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ