SSLでログインしたあと, ファイルをダウンロードするためのTclスクリプトを書いてみる. wgetやcurlを使ってもよいが, tlsパッケージを併用するとhttpでSSL (https) が扱える.
package require http package require tls ::http::register https 443 ::tls::socket
SSLサイトでのログイン. まず::http::formatQueryでPOSTするデータを作る. 送信すべきデータはサイトにより異なる.
set login [::http::formatQuery email $email passwd $passwd action login]
メタデータからクッキーをリストに保存.
set tok [::http::geturl $loginurl -query $login] upvar #0 $tok state set cookies [list] foreach {name value} $state(meta) { if {$name eq "Set-Cookie"} { lappend cookies [lindex [split $value {;}] 0] } } ::http::cleanup $tok
クッキーは, ヘッダにつけて送信.
set tok2 [::http::geturl $dataurl$fname -headers [list Cookie [join $cookies {;}]]]
リダイレクトされる場合は, メタデータのLocationを使う.
upvar #0 $tok2 state array set meta $state(meta)
$meta(Location)にURLが入っているはず. リダイレクト先からのダウンロードにもクッキーが必要.
set tok3 [::http::geturl $meta(Location) -channel $f -headers [list Cookie [join $cookies {;}]]] ::http::cleanup $tok2 ::http::cleanup $tok3