tclのHTTPクライアントでcookieの持ちまわしを自動でやるプログラムです。~
一応tclers wikiには[[Cookies:http://wiki.tcl.tk/3828]]というページがあって、一応こうすればいいじゃんみたいなシンプルなコードがあるのですが、PerlのHTTP::Cookiesやそこから派生したらしいPythonのcookielib.pyみたいに自動でクッキーを取得したり、ドメインを判別して、自動でヘッダーにクッキーを付けてくれたり、対話シェルでクッキーのやり取りが見えるのがすぐに欲しかったので適当にでっちあげた。

***ダウンロード [#waf52e58]
http://reddog.s35.xrea.com/software/httpcookie.tcl

***ライセンス [#wb75cb99]
各自の責任の範囲でご自由にライセンスです。

***使い方 [#u57fd15d]
パッケージとしてインストールするにはライブラリディレクトリ(Windowsならc:/tcl/libとか)にhttpcookieというディレクトリを掘り、ファイルをコピーし、そのディレクトリに入って、tclshから"pkg_mkIndex ."。そして
 package require httpcookie
パッケージではなく、そのままちょっと使ってみるときは
 source httpcookie.tcl
みたいにして読み込む。あとは普通にhttp::geturlでOK。~
tclshの対話シェルで色々とクッキーのやり取りがstdoutに出力されるのがうざいときは
 set httpcookie::info 0
みたいにして黙らせる。
セッションオンリーのcookieを消去するには、
 httpcookie::killSessionOnlyCookie
でOK。クッキーのデータはhttpcookie::cookiesという配列なので、保存したい時は
 set fp [open cookies.txt w]
 puts $fp [httpcookie::dump]
 close $fp
みたいに。httpcookie::dumpはhttpcookie::cookiesの配列の中身をダンプするだけ。読み込むときは
 set fp [open cookies.txt r]
 array set httpcookie::import [read $fp]
 close $fp
みたいにhttpcookie::importを使う。
クッキーの一覧を見たいときは[parray httpcookie::cookies]とか適当に。。。

***tclshから使ってみた感じ [#z106174f]
 % package require httpcookie
 0.1
 % lappend tl [http::geturl http://www.yahoo.com]
 ---------------------------------------------------
 URL : http://www.yahoo.com
 
 Get Cookie : www.yahoo.com / 2006-06-01 19:00:00
 FPB=c8v146usl11l4uhj
 
 ::http::1
パッケージを読み込んでyahooに接続してみた感じ。---~以下のはクッキーのやり取りを表示してるので、うるさいときは前に書いたようにして出力しないようにすることもできるけど、ここはやり取りを見せたいのでそのまま。
 % lappend tl [http::geturl http://www.yahoo.com]
 ---------------------------------------------------
 URL : http://www.yahoo.com
 
 SendCookie : www.yahoo.com / 2006-06-01 19:00:00
 FPB=c8v146usl11l4uhj
 
 ::http::1 ::http::2
もう一度接続してみて取得したクッキーが送信されるのを確認。
 % lappend tl [http::geturl http://www.sun.com]
 ---------------------------------------------------
 URL : http://www.sun.com
 
 Get Cookie : .sun.com / 2025-12-31 23:59:59
 SUN_ID=61.205.134.96:7001129478709
 
 Get Cookie : www.sun.com / SESSION ONLY
 JSESSIONID=2D33ED16131195B5B3C6C731A05A7A7D.tomcat6
 
 ::http::1 ::http::2 ::http::3
sunに接続してみる。
 % lappend tl [http::geturl http://www.sun.com]
 ---------------------------------------------------
 URL : http://www.sun.com
 
 SendCookie : www.sun.com / SESSION ONLY
 JSESSIONID=2D33ED16131195B5B3C6C731A05A7A7D.tomcat6
 
 SendCookie : .sun.com / 2025-12-31 23:59:59
 SUN_ID=61.205.134.96:7001129478709
 
 ::http::1 ::http::2 ::http::3 ::http::4
もう一回接続して、クッキーが送信されてるのを確認。
 % parray httpcookie::cookies
 httpcookie::cookies(.sun.com,/,SUN_ID)        = 61.205.134.96:7001129478709  20251231235959 0
 httpcookie::cookies(www.sun.com,/,JSESSIONID) =  2D33ED16131195B5B3C6C731A05A7A7D.tomcat6 {} 0
 httpcookie::cookies(www.yahoo.com,/,FPB)      = c8v146usl11l4uhj 20060601190000 0
クッキーの一覧を見てみた。

 % httpcookie::killSessionOnlyCookie
 killCookie : www.sun.com / JSESSIONID
 BEDF02EC10171B112860E50269BB916D.tomcat1 {} 0
 
セッションオンリーのクッキーを削除。
 % parray httpcookie::cookies
 httpcookie::cookies(.sun.com,/,SUN_ID)   = 61.205.134.96:700112947951720251231235959 0
 httpcookie::cookies(www.yahoo.com,/,FPB) = dt1vu3cd311l4var 20060601190000 0
もう一度一覧を見て消えてるのを確認。
 % lappend tl [http::geturl http://www.sun.com]
 ---------------------------------------------------
 URL : http://www.sun.com
 
 SendCookie : .sun.com / 2025-12-31 23:59:59
 SUN_ID=61.205.134.96:7001129479517
 
 Get Cookie : www.sun.com / SESSION ONLY
 JSESSIONID=DDD4AF7B14362E3EA7DAD3B45105E2D8.tomcat8
 
 ::http::1 ::http::2 ::http::3 ::http::4 ::http::5
もう一度接続してみて、クッキーの送信と消したクッキーを再取得するのを確認。
 % foreach t $tl {http::cleanup $t}
メモリ解放。~
~

***今後の予定(必要があれば) [#ec4768c0]
-クッキーの仕様をちゃんと読む
-ブラウザのクッキーを読み書きできるようにする?
-クッキーを許さないサイトとか管理できるようにする?
-リファクタリング
-クッキーのON/OFFを切り替えられるようにする?

***コメントをどーぞ [#bd501d61]
#comment
----
[[CategoryTclTk]]


|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.008 sec.