22

我需要编写代码,通过检查文件的 URL 来确定文件是否存在。

目前我实现了这个:

error_code = 400;
response = Net::HTTP.get_response(URI(url));
return response.code.to_i < error_code;

但是,它不能正常工作,因为每次下载文件时,如果我有大文件或很多文件,这真的很慢。

如何在不下载文件的情况下确定远程端是否存在文件?

4

3 回答 3

33

如果你想使用 Net::HTTP 那么你可以这样做:

uri = URI(url)

request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200
于 2013-04-19T00:30:06.233 回答
6

做这样的事情

require "rest-client"

begin
  exists = RestClient.head("http://google.com").code == 200
rescue RestClient::Exception => error
  exists = (error.http_code != 404) 
end

然后“存在”是一个布尔值,取决于它是否存在。这只会获取标题信息,而不是文件,因此对于小文件或大文件应该是相同的。

于 2013-04-18T23:59:45.513 回答
2

我会这样写:

require 'net/http'

ERROR_CODE = 400

response = Net::HTTP.start('www.example.net', 80) do |http|
  http.request_head('/index.html') 
end

puts response.code.to_i < ERROR_CODE

哪个输出true,因为我得到302response.code.

于 2013-04-19T01:02:38.453 回答