From: "青山 和光" Date: 1998-02-20T09:54:03+09:00 Subject: [ruby-list:6560] http_get.rb 大きなデータも 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 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