File.basename(open(source_url))
予期さopen(source_url)
れるような文字列ではなく、何らかの I/O ハンドルを返すため、機能しません。File.basename
File.basename(source_url)
URL が何らかのpath/to/service/with/parameters/in/line/like/this
タイプのエンコーディングを使用していない限り、動作する可能性が高くなります。
ただし、Ruby の URI ライブラリには、ここで役立つ便利なツールがあります。何かのようなもの:
File.basename(URI.parse(source_url).path)
が出発点になります。例えば:
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
と:
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
ファイルサイズも取得できるかどうか、またどのように取得できるか知っていますか?
HTTP をローカルでテストする優れた方法はgem server
、コマンドラインから実行し、gem でドキュメント用の小さな Web サーバーを起動させることです。
require 'open-uri'
html_doc = open('http://0.0.0.0:8808/') do |io|
puts io.size
io.read
end
puts html_doc.size
# => 114350
# => 114350
OpenURI のコマンドでブロックを使用すると、クラスopen
のインスタンスであるブロック変数の接続に関する多くの情報にアクセスできます。Tempfile
したがって、を使用して受信ファイルのサイズを確認できますsize
。
小さなファイルの場合は問題ありませんが、大きなファイルを取り込む場合は、Net::HTTP を使用して調査し、サイズが含まれている可能性がhead
ある要求を送信することをお勧めします。可能性があると言います。これは、動的コンテンツの場合、またはあえて言わない CGI またはサブサービスによって返されるコンテンツの場合、サーバーが返される量がわからない場合があるためです。
「head」リクエストを使用する利点は、サーバーがコンテンツ全体ではなくヘッダーのみを返すことです。head
そのため、過去に、必要なデータを取得できるかどうかを確認するために、を使用してリクエストを開始しました。そうでない場合は、通常の を使用して完全な応答を取得する必要がありますget
。