我需要编写代码,通过检查文件的URL确定文件是否存在。
目前我实现了这个:
error_code = 400;
response = Net::HTTP.get_response(URI(url));
return response.code.to_i < error_code;
但是,它不能正常工作,因为每次下载文件时,如果我有大文件或很多文件,这个文件真的很慢。
如何在不下载的情况下确定远程端是否存在文件?
答案 0 :(得分:30)
如果你想使用Net :: HTTP,你可以这样做:
uri = URI(url)
request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200
答案 1 :(得分:5)
做这样的事情
require "rest-client"
begin
exists = RestClient.head("http://google.com").code == 200
rescue RestClient::Exception => error
exists = (error.http_code != 404)
end
然后“exists”是一个布尔值,取决于它是否存在。这只会获取标题信息,而不是文件,因此对于小文件或大文件应该是相同的。
答案 2 :(得分: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
,因为302
获得了response.code
。