LoginSignup
15
23

More than 5 years have passed since last update.

cURLでこういうときはどうする?

Last updated at Posted at 2018-06-28

はじめに

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関連はまた後日追加します。

15
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
23