それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Curlコマンドの使い方例。curlコマンドの情報は意外と少ない・・・

curl 便利ですよね。毎日のように使います。プログラミングなしでWEBアクセスやSCPアクセスができるので重宝します。

curl の使い方

curl コマンドでよく使うものについてまとめておきます。

ページ取得 curl URL

まず一番単純な例。example.comサイトのトップページを標準出力へ出力。

curl http://www.example.com/

ページをファイルに保存 curl -o name URL

標準出力ではなくローカルへ自由なファイル名で保存するには-oオプションで。

$ curl -o my.jpg  http://www.example.com/top.jpg
-O(オーの大文字)オプションの場合

-O (大文字)はURL上のファイル名で保存する。

$ curl -O http://www.example.com/images/photo1.jpg

この場合 http://www.example.com/ のように、ファイル名が無いURLに使うと、ファイルが作成されないことに注意。


POST送信 -d オプション。

フォームの送信と同様な事をCurlでする。POSTの送信。この場合は application/x-www-form-urlencodedに相当する。

curl -d name=takuya -d hatena_id=takuya_1st  http://example.com/oauth.php

-d KEY=VALUE を重ねて書けばいい 。

POSTデータは、POST本文にGET引数と同じものを key=value&key1=value2&key2=value2 と続けて書く感じですね。詳しくはapplication/x-www-form-urlencodedについて知っておきましょう。

サーバーのHTTPヘッダー情報取得 curl -I URL

私はこれを一番良く使います。ヘッダー情報を閲覧することでサーバーになるのがいい。

takuya@air:~/Desktop$ curl -I  mixi.jp
HTTP/1.1 200 OK
Date: Wed, 21 Nov 2012 05:55:22 GMT
Server: Apache
X-Dealer: 151060
Cache-Control: no-cache
Pragma: no-cache
X-XRDS-Location: https://mixi.jp/xrds.pl
X-UA-Compatible: IE=EmulateIE7
Vary: Accept-Encoding
Content-Type: text/html; charset=EUC-JP
Set-Cookie: _lcp=cb3e60b072c4cd530997c605e3012dd8; domain=.mixi.jp; path=/; expires=Wed, 21-Nov-2012 06:05:22 GMT
X-Content-Type-Options: nosniff
Connection: close

リダイレクトの確認に、ヘッダー情報閲覧

curl -I オプションでヘッダーを見るのに一番重要なのがヘッダーの閲覧。正しくリダイレクトされているかが特に重要

takuya@air:~/Desktop$ curl -I https://google.com
HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Wed, 21 Nov 2012 05:56:03 GMT
Expires: Fri, 21 Dec 2012 05:56:03 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 220
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

BASIC 認証のページにアクセスする。 curl -u

これは通常のURL埋め込みでもいいようです

curl -u username:password http://www.example.com/member/
curl -basic username:password http://www.example.com/member/
curl  http://username:password @www.example.com/member/

証明書エラーが出るんだけど。 curl -k URL

SSL接続で証明書のエラーをスキップさせたかったら-k オプションを使う。

curl -k https://www.example.com/

一時的に使うんであればいいんではないでしょうか。


サーバーとのコネクション

サーバーとのコネクションやり取りを表示する。

takuya@air:~/Desktop$ curl -v mixi.jp
* About to connect() to mixi.jp port 80 (#0)
*   Trying 110.44.179.198...
* connected
* Connected to mixi.jp (110.44.179.198) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: mixi.jp
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 21 Nov 2012 06:02:43 GMT
< Server: Apache
< X-Dealer: 232035
< Cache-Control: no-cache
< Pragma: no-cache
< X-XRDS-Location: https://mixi.jp/xrds.pl
< X-UA-Compatible: IE=EmulateIE7
< Vary: Accept-Encoding
< Content-Type: text/html; charset=EUC-JP
< Set-Cookie: _lcp=fe0211c7f24909f35704108cfc568532; domain=.mixi.jp; path=/; expires=Wed, 21-Nov-2012 06:12:43 GMT
< X-Content-Type-Options: nosniff
< Connection: close
< Transfer-Encoding: chunked
< 

その他知っておくと便利な感じ

-# プログレスバーを表示
-s 不要なプログレスメータを出力しない

ファイルをFTPアップロードする。

以下コマンドはftpでアップロードするのと同様のことを実行する。

curl -T banner.jpg -u username:password ftp://ftp.example.com/static/imgs/

-Tの後にアップロードするファイルを指定。

別の書き方

ユーザ名、パスワードはURL書式に含めてしまってもいい。

curl -T banner.jpg -u  ftp://username:password@ftp.example.com/static/imgs/

ディレクトリごと取り出す

ftp://example.comの / ディレクトリごと取り出す。

 curl ftp://username:password@example.com/

証明書エラーは無視する。

証明書エラーは無視する

curl -k https://example.com/


no-check-certificate はないので、 -k



感想

curl って使われてないの?個人的にはすごく頻繁に使うのですが、wget に比べてマイナー感が否めない。