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