Трудно обнаружить, что сеть временно исчезла (намеренно так; именно так работает TCP / IP, а HTTP просто находится поверх этого). Что вы можете сделать, это попытаться получить ожидаемую длину данных из заголовков HTTP и сравнить ее с длиной фактически полученных данных (для этого вы захотите включить двоичный режим, но в любом случае вы, вероятно, имеете дело с двоичными данными) .
Чтобы получить ожидаемую длину данных и загружаемую в данный момент длину, вам нужно немного волшебства с upvar
(имя внутреннего псевдонима, state
, произвольно):
upvar #0 $token state
puts "Content-Length was $state(totalsize), downloaded $state(currentsize)"
Обратите внимание, что многие страницы не предоставляют длину контента, поэтому поле totalsize
равно нулю. Пакет http знает только в тех случаях, что у него есть конец, когда он доходит до конца.
При возобновлении загрузки вы захотите отправить заголовок Range
. Это не поддерживается в явном виде, поэтому вам нужно указать его с помощью опции -headers
для geturl
.
http::geturl $url -headers [list Range bytes=$whereYouGotTo-]
Да, формат действительно такой прикольный.