2016-02-27 2 views
0

Как скачать файл с помощью пакета http?Как загрузить файл с помощью пакета http?

package require http 
set file [ ::http::geturl "<url>"] 

Что-то напоминает формат к тому, что делает завиток:

curl -X GET '<URL>' -o /tmp/download.tar 

Мое требование я имею файл на сервер Linux X & из другого Linux сервера Y, где у меня есть мой http пакет устанавливается вместе с Tcl , Теперь может кто-нибудь предложить, как загрузить этот файл с X & сохранить его в Y?

ответ

1

Если бы вы искали «TCL HTTP загрузки файла» вы нашли бы this page, который имеет следующий код:

package require http 
proc getPage { url } { 
    set token [::http::geturl $url] 
    set data [::http::data $token] 
    ::http::cleanup $token   
    return $data 
} 

Команда называется getPage, но он получит большинство файлов для вас. Он не будет обрабатывать двоичные файлы правильно, но если вы будете искать еще несколько или посмотрите документацию, вы узнаете, как справиться с ними.

+0

Спасибо, ребята, мне это очень помогло :-) – Chakri

2

Если вы читаете documentation, вы увидите, что если вы передадите опцию -channel, команда http::geturl будет записывать данные с URL-адреса на этот канал. Он делает это эффективно. Кроме того, если вы передадите флаг -binary, вы можете заставить их не интерпретировать байты. Это инструменты, которые вам нужны.

Однако вы также должны знать, что возвращаемое значение от http::geturl является «токеном», которое используется в следующих командах, например, для запроса того, был ли GET успешным. Его следует очистить, когда вы закончите.

Вот пример с очень маленьким обнаружением ошибок.

set f [open /tmp/download.tar wb] 
set tok [http::geturl $URL -channel $f -binary 1] 
close $f 
if {[http::status $tok] eq "ok" && [http::ncode $tok] == 200} { 
    puts "Downloaded successfully" 
} 
http::cleanup $tok 

Существует множество вещей, которые могут пойти не так!

Смежные вопросы