Если вы просто хотите сохранить содержимое URL-адреса в файл, стандартный пакет http
имеет параметр -channel
, который позволяет выполнять дамп напрямую.Например:
package require http
set f [open video.dump w]
fconfigure $f -translation binary
set tok [http::geturl "http://server:port/url" -channel $f]
close $f
if {[http::ncode $tok] != 200} {
# failed somehow...
} else {
# succeeded
}
http::cleanup $tok
Редактировать: Делать это асинхронно (требуется выполнение цикла событий, например, через vwait forever
):
package require http
set f [open video.dump w]
fconfigure $f -translation binary
proc done {f tok} {
close $f
if {[http::ncode $tok] != 200} {
# failed somehow...
} else {
# succeeded
}
http::cleanup $tok
}
http::geturl "http://server:port/url" -channel $f -command "done $f"
# Your code runs here straight away...
Обратите внимание, что кодузнаваемо похожи, но теперь в несколько ином порядке!Если у вас есть Tcl 8.5 - если нет, то почему бы и нет?- тогда вы можете использовать лямбда-приложение, чтобы сделать видимый порядок кода еще более похожим:
package require http
set f [open video.dump w]
fconfigure $f -translation binary
http::geturl "http://server:port/url" -channel $f -command [list apply {{f tok} {
close $f
if {[http::ncode $tok] != 200} {
# failed somehow...
} else {
# succeeded
}
http::cleanup $tok
}} $f]
# Your code runs here straight away...