curl使用紹介---転載

6570 ワード

Curlは強力なhttpコマンドツールで、その機能は非常に強力です.
1)何はさておき、ここから始めましょう.
$ curl http://www.yahoo.com
車に戻ったら、wwww.yahoo.comの)画面にちらほらと表示されました.    ~
2)うん、読み終わったページを保存したいですが、そうですか?
$ curl http://www.yahoo.com > page.html
もちろんいいです.でも、そんなに面倒をかけなくてもいいです.
curlの内蔵optionを使えばいいです.httpを預けた結果、このoptionを使います.-o
$ curl -o page.html http://www.yahoo.com
このように、画面にダウンロードページの進捗指示が表示されます.100%まで進んだら、もちろんOKですよ.
3)何ですか?アクセスできませんか?きっとあなたのproxyは設定されていません.
curlを使う時、このoptionでhttpアクセス用のproxyサーバとポートを指定できます.
$ curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com
4)いくつかのサイトを訪問する時は嫌です.クッキーを使ってsession情報を記録します.
IE/NNのようなブラウザでは、もちろんクッキー情報を簡単に処理することができますが、私たちのガールは?
私たちはこのオプトインを勉強します.これはhttpのレスポンスの中のクッキー情報を特別なファイルに保存します.
$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com
このように、ページがPagee.に保存されると同時に、cookie情報もcookie 0001.txtに保存されました.
5)では、次の訪問の際、前回残したクッキー情報はどう使いますか?知っておきたいのですが、多くのサイトはあなたのクッキー情報を監視して、ルールに従って彼らのサイトを訪問していないかどうかを判断します.
今回はこのoptionを使って前回のクッキー情報をhttp requestに追加します.
$ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com
このように、私達はほとんどすべてのIE操作をシミュレーションして、ウェブページを訪問することができます.
6)ちょっと待ってください    ~何か忘れたようです.    ~
そうだブラウザ情報です  
いくつかの嫌なウェブサイトはいつも私達がいくつかの特定のブラウザを使って彼らを訪問しなければならなくて、時には更にひどいのは、まだいくつかの特定のバージョンを使います.     NND、どこでこれらの怪しいブラウザを探す時間がありますか?
幸いにも、curlは私たちに有用なoptionを提供してくれました.今回の訪問によって宣伝された自分のブラウザ情報を自由に指定できます.
$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com
このように、サーバー側は訪問の要求を受けて、Windows 2000上で実行しているIE 6.0だと思います.えっと、実はアップルを使っているかもしれません.
Mozilla/4.73[en](X 11;U;Linux 2.2;15 i 686)はPCで走っているLinuxだと相手に教えられます.Netscape 4.73を使っています.
7)他のサーバー側でよく使われている制限方法は、httpアクセスのrefererをチェックすることです.例えば、最初にトップページにアクセスして、中で指定されたダウンロードページにアクセスしてください.今回2回目に訪問したrefererアドレスは、最初に訪問したページのアドレスです.このようにサーバー側はダウンロードページに対してある訪問のrefereerアドレスがトップページのアドレスではないことを発見すれば、切断できます.それは窃盗中隊に違いない.    ~
嫌いです.私は泥棒です.    ~!!
幸い、curlはrefererを設定したoptionを提供してくれました.
$ curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html -D cookie0001.txt http://www.yahoo.com
これで、相手のサーバーを騙すことができます.メール.yahoo.comからあるリンクをクリックしてきました.
8)大切なものが抜けていることに気づいたと書いてあります.
先ほど説明しましたが、ページをダウンロードして一つのファイルに行けば、-oを使ってファイルをダウンロードすることもできます.例えば、
$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
ここで新しいoption:-O大文字のOを教えます.このように使います.
$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
このようにして、サーバー上のファイル名によって、自動的にローカルが存在します.
もっと使いやすいのをもう一つお願いします.
screen 1.JPG以外にもscreen 2.JPG、screen 3.JPG、…、screen 10.JPGをダウンロードする必要がありますが、これらの操作を完成するためにscriptを書かせなければなりませんか?
やめます
curlの中では、こう書けばいいです.
$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG
ふふ、すごいでしょう?!
9)また来ます.説明を続けてダウンロードします.
$ curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
こうして生まれたダウンロードは
~zzh/001.JPG
~zzh/002.JPG
...
~zzh/201.JPG
~nick/001.JPG
~nick/002.JPG
...
~nick/201.JPG
十分便利ですよね?ハハハ.
えっ?嬉しいのは早すぎます.
zzzh/nikのファイル名はすべて001、002…で、201、ダウンロードしたファイルの名前が重いので、後は前のファイルを全部上書きしました.
大丈夫です.もっとひどいのがあります.
$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
—これは……カスタムファイル名のダウンロード?
このように、ダウンロードしたファイル名をカスタマイズして、元のようになりました.zzzh/001.JPG->ダウンロード後:001-zh.JPG元:~nik/001.JPG->ダウンロード後:001-nick.JPG
このようにして、ファイルの名前が怖くないです.
9)話を続けてダウンロードする
私達は普段windowsのプラットフォームの上で、flashgetこのようなツールは私達にブロックを分けて並行してダウンロードするように手伝うことができて、また断線して引き続き伝えることができます.curlはこれらの方面で誰にも負けないで、へへ
例えば私達はscreen 1.JPGをダウンロードしています.突然オフラインしました.このようにして継続します.
$ curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG
もちろん、flashgetを持って半分のファイルをダウンロードして私をごまかすのはやめてください.    他のダウンロードソフトの半分のファイルは使えますよ.
ブロック分けでダウンロードします.私たちはこのoptionを使えばいいです.
例をあげて説明する
たとえば私たちは一つあります.http://cgi2.tky.3web.ne.jp/~zzzh/zhao 1.mp 3をダウンロードしたいです.(趙先生の電話朗読:D)私達はこのような命令を使うことができます.
$ curl -r 0-10240 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &/
$ curl -r 10241-20480 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &/
$ curl -r 20481-40960 -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &/
$ curl -r 40961- -o "zhao.part1" http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
このようにブロックに分けてダウンロードできます.でも、これらの破砕されたファイルを自分で結合する必要があります.UNIXやアップルを使ってcat zhao.part*>zhao.mp 3を使えばいいです.Windowsを使うなら、copy/bで解決してください.
上で言っているのはhttpプロトコルのダウンロードですが、ftpも同じです.使い方ですか?
$ curl -u name:passwd ftp://ip:port/path/file
あるいはみんなが知っている
$ curl ftp://name:passwd@ip:port/path/file
10)ダウンロードを終えました.次は当然アップロードのoptionは-Tです.
例えば、ftpにファイルを転送します.
$ curl -T localfile -u name:passwd ftp://upload_site:port/path/
もちろん、httpサーバにファイルをアップロードしてもいいです.
$ curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
なお、このとき使用するプロトコルはHTTPのPUT methodです.
先ほどPUTと言いましたが、へへへ、自然と古い服に思い出しました.他のいくつかのmethosはまだ話していません.GETもPOSTも忘れないよ.
httpはフォームを提出します.よく使われているのはPOSTモードとGETモードです.
GETモードは何のoptionも使わないです.変数をurlに書くだけでいいです.
$ curl http://www.yahoo.com/login.cgi?user=nickwolfe&password=12345
POSTモードのoptionは-dです.
例えば、
$ curl -d "user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
このサイトに一回登録申請を出すのと同じです.    ~
GETモードとPOSTモードのどちらを使うべきかは、対向サーバのプログラム設定を見ます.
一つ注意したいのは、POSTモードのファイル上のファイルのアップロード、例えば
<form method="POST" enctype="multipar/form-data" action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
<input type=file name=upload>
<input type=submit name=nick value="go">
</form>
このようなHTTPフォームは、curlでシミュレーションします.このような文法です.
$ curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi
くどいですが、Crlはhttpsの時に地元の証明書を使うなど、テクニックと使い方がたくさんあります.
$ curl -E localcert.pem https://remote_server
また、例えば、Crlでdict協議を通じて辞書を引くこともできます.    ~
$ curl dict://dict.org/d:computer