大きなデータも HTTP で公開するのがはやりのようですね。しかし、WWW ブラ
ウザって結構落ちるので、ダウンロード中は気を使ってしまい、不便です。

そこで、簡単なダウンローダを作ってみました。落したバイト数、割合、速度、
終了予測時刻等を表示させるようにしたので、一応使えます。

100/1000 bytes 10 % 2000.00 bytes/sec End: 12:00:00

また、ダウンローダとして作ったのですが、エラー出力を止めると CGI の出
力チェックにも便利で、チャットサーバーのデバッグにも重宝しています。
(コマンドラインヒストリで繰り返して動かすのが簡単なので telnet より便利。) 


#!/usr/local/bin/ruby
#
# http_get.rb http://host/target
#
# Wakou Aoyama <pxn11625 / niftyserve.or.jp>

require "socket"

host, port, file = ARGV.shift.scan(%r|http://([^:/]+):?([^/]*)(.+)|)[0]
sock = TCPsocket.open(host, (port == "" ? 80 : port))

sock.print "GET #{file} HTTP/1.0\n\n"
head = ''
head += sock.read(1) until /\r\n\r\n|\n\n|\r\r/ =~ head
content_length = head.scan(/^Content-length:\s*(\d+)/i)[0][0].to_i
length = 0
start_time = Time.now

while data = sock.gets
  print data
  length += data.length
  speed = length / (Time.now - start_time)
  rest_time = (content_length - length) / speed
  STDERR.print "#{length}/#{content_length} bytes #{length/content_length} %"
  STDERR.print " #{speed} bytes/sec"
  STDERR.print " End: #{(Time.now + rest_time).to_s.split[3]}\n"
end
STDERR.print "\n===== End ! =====\n"


青山 和光 Wakou Aoyama <pxn11625 / niftyserve.or.jp>