Ответ 1
Если вы хотите использовать Net:: HTTP, вы можете сделать это следующим образом:
uri = URI(url)
request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200
Мне нужно написать код, который определит, существует ли файл, проверяя его URL.
В настоящее время я реализую это:
error_code = 400;
response = Net::HTTP.get_response(URI(url));
return response.code.to_i < error_code;
Но он не работает правильно, потому что каждый раз он загружает файл, который очень медленный, если у меня есть большие файлы или их много.
Как определить, существует ли файл на удаленной стороне, не загружая его?
Если вы хотите использовать Net:: HTTP, вы можете сделать это следующим образом:
uri = URI(url)
request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200
Сделайте что-то вроде этого
require "rest-client"
begin
exists = RestClient.head("http://google.com").code == 200
rescue RestClient::Exception => error
exists = (error.http_code != 404)
end
Тогда "существует" является булевым, зависящим от того, существует ли он или нет. Это будет получать информацию заголовка, а не файл, поэтому он должен быть одинаковым для небольших или больших файлов.
Я бы написал так:
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
.