読者です 読者をやめる 読者になる 読者になる

curlよく使うメモ

下部のおまけのほうがメインかも

■ダウンロード(プロトコル無指定の場合はhttp)
$ curl http://domain/
$ curl domain

■ダウンロードファイル保存
$ curl -O http://www.google.com/index.html

■ダウンロードファイル保存(ファイル名指定)
$ curl -o index.html www.google.com

■ヘッダーの取得
$ curl -Is www.google.com

ftpでファイル取得
$ curl ftp://domain:port/full/path/to/file

■ftpsでファイル取得
$ curl --ssl ftp://domain:port/full/path/to/file

ftpでファイル取得 ログインして取得(:passwordなしだと、実行後パスワードを求められる)
$ curl -u username:password ftp://domain:port/full/path/to/file

ftpでアップロード(-全データ、filename指定/-u IDとPW、-aを加えると追記)
$ curl -T - ftp://domain:port/myfile
$ curl -T filename ftp://domain:port/myfile
$ curl -T filename -u username:password ftp://domain:port/myfile
$ curl -T filename -u username:password -a ftp://domain:port/myfile

■キーファイルを使った取得
$ curl -u username: --key ~/.ssh/id_rsa scp://domain/~/file.txt

■プロキシを使った取得(プロキシに認証が必要な場合は -U を使う。接続先の認証は-uを使い同時に使用)
$ curl -x proxyserver:port ftp://domain/
$ curl -U username:password -x proxyserver:port ftp://domain/

■プロキシを使わない場合
$ curl --noproxy ftp://domain/

■ヘッダー取得(Iはヘッダーだけ。iはヘッダーと本文)
$ curl -I domain
curl -i domain

リファラ、ユーザエージェント
$ curl -e domainname http://domain
curl -A 'UserAgent' http://domain

■速度制限 例1秒間に1000byte以下
$ curl -Y 1000 -y 1 domain
$ curl --limit-rate 1K domainm

■ダウンロード再開(-C -)
$ curl -o file ftp://domain/path/file
$ curl -C - -o file ftp://domain/path/file

■更新されている場合ダウンロード
$ curl -z local.html http://domain/remote.html

■デバックモード(vヘッダーつき 他は詳細でファイル保存される
$ curl -v domain
$ curl --trace trace.txt domain
$ curl --trace-ascii trace.txt domain
$ curl --dump-header headers.txt domain

■出力制御(s進捗とエラーメッセージなし,sS進捗なし,f通常終了コード0になる400番台を異常終了にする,kSSLエラー無視)
$ curl -s domain
$ curl -sS domain
$ curl -f domain
$ curl -k domain



■おまけ

■使用中のグローバルIPアドレスの確認
$ curl ifconfig.me

他に以下のようなものがあり
http://ifconfig.me

$ curl ifconfig.me
$ curl ifconfig.me/ip
$ curl ifconfig.me/host
$ curl ifconfig.me/ua
$ curl ifconfig.me/port
$ curl ifconfig.me/lang
$ curl ifconfig.me/keepalive
$ curl ifconfig.me/connection
$ curl ifconfig.me/encoding
$ curl ifconfig.me/mime
$ curl ifconfig.me/charset
$ curl ifconfig.me/via
$ curl ifconfig.me/forwarded
$ curl ifconfig.me/all
$ curl ifconfig.me/all.xml
$ curl ifconfig.me/all.json

■10秒毎に計測
URL=http://www.google.com; while true; do echo $(curl -L --w %{speed_download} -o/dev/null -s $URL) >> bps.log; sleep 10;done &

■天気
$ weather(){ curl -s "http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml?query=${@:-}"|perl -ne '/\([^<]+)/&&printf "\x1B[0;34m%s\x1B[0m: ",$1;/\([^<]+)/&&print $1,"\n"';}
$ weather tokyo

April 12, 2015: Clear. High 15&amp;deg;C (59&amp;deg;F). Winds 21 kph ENE
April 13, 2015: Rain. High 12&amp;deg;C (53&amp;deg;F). Winds 28 kph NE
April 14, 2015: Rain. High 15&amp;deg;C (59&amp;deg;F). Winds 10 kph North
April 15, 2015: Clear. High 18&amp;deg;C (64&amp;deg;F). Winds 46 kph SSW
April 16, 2015: Clear. High 18&amp;deg;C (64&amp;deg;F). Winds 21 kph SSW
April 17, 2015: Clear. High 19&amp;deg;C (66&amp;deg;F). Winds 54 kph SSW

ステータスコードを得るだけ
$ urls=('google.com' 'yahoo.co.jp'); for i in ${urls[@]}; do http_code=$(curl -I -s $i -w %{http_code}); echo $i status: ${http_code:9:3}; done

google.com status: 302
yahoo.co.jp status: 301

短縮URLのURLをチェック
$ check(){ curl -sI $1 | sed -n 's/Location: *//p';}
$ check htn.to/sVVDym

http://dy.hateblo.jp/

gmail取得
にusername@gmail.comのアカウント名
にusername@gmail.comのパスワード

$ curl -u : --silent "https://mail.google.com/mail/feed/atom" | perl -ne 'print "\t" if //; print "$2\n" if /<(title|name)>(.*)<\/\1>/;'


curl時のレスポンス詳細確認(curl-format.txt作成後、実行)
$ vi curl-format.txt

\n
            time_namelookup:  %{time_namelookup}\n
               time_connect:  %{time_connect}\n
            time_appconnect:  %{time_appconnect}\n
           time_pretransfer:  %{time_pretransfer}\n
              time_redirect:  %{time_redirect}\n
         time_starttransfer:  %{time_starttransfer}\n
                            ----------\n
                 time_total:  %{time_total}\n
\n

$ curl -w "@curl-format.txt" -o /dev/null -s http://www.google.com/

            time_namelookup:  0.151
               time_connect:  0.165
            time_appconnect:  0.000
           time_pretransfer:  0.165
              time_redirect:  0.000
         time_starttransfer:  0.179
                            ----------
                 time_total:  0.179

こちらがもっと詳しい
curlでボトルネック調査をする - 256bitの殺人メニュー

■辞書検索(mで探して、dで表示)

$ curl dict://dict.org/m:nslookup

220 pan.alephnull.com dictd 1.12.1/rf on Linux 3.14-1-amd64 <auth.mime> <16312396.29353.1428900068@pan.alephnull.com>
250 ok
152 1 matches found
foldoc "nslookup"
.
250 ok [d/m/c = 0/1/78074; 0.000r 0.000u 0.000s]
221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]

$ curl dict://dict.org/d:nslookup

220 pan.alephnull.com dictd 1.12.1/rf on Linux 3.14-1-amd64 <auth.mime> <16312399.29362.1428900071@pan.alephnull.com>
250 ok
150 1 definitions retrieved
151 "nslookup" foldoc "The Free On-line Dictionary of Computing (20 July 2014)"
nslookup

   <networking> A {Unix} {utility program}, originally by Andrew
   Cherenson, for querying {Internet} {domain name servers}.  The
   basic use is to find the {IP address} corresponding to a
   given {hostname} (or vice versa).  By changing the query type
   (e.g. "set type=CNAME") other types of information can be
   obtained including CNAME - the {canonical name} for an alias;
   HINFO - the host {CPU} and {operating system} type; MINFO -
   mailbox or mail list information; {MX} - {mail exchanger}
   information; NS - the {name server} for the named zone; PTR -
   the hostname if the query is an IP address, otherwise
   the pointer to other information; SOA the domain's
   start-of-authority information; TXT - text information; UINFO
   - user information; WKS - supported {well-known services}.
   Other types (ANY, AXFR, MB, MD, MF, NULL) are described in
   {RFC 1035}.

   
{(ftp://src.doc.ic.ac.uk/computing/operating-systems/unix/bsd-sources/usr.sbin/named/tools/nslookup/)}.

   (1994-10-27)

.
250 ok [d/m/c = 1/0/72; 0.000r 0.000u 0.000s]
221 bye [d/m/c = 0/0/0; 0.000r 0.000u 0.000s]