Подтвердить что ты не робот

Как проверить, существует ли файл с его URL-адресом без его загрузки?

Мне нужно написать код, который определит, существует ли файл, проверяя его URL.

В настоящее время я реализую это:

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

Но он не работает правильно, потому что каждый раз он загружает файл, который очень медленный, если у меня есть большие файлы или их много.

Как определить, существует ли файл на удаленной стороне, не загружая его?

4b9b3361

Ответ 1

Если вы хотите использовать Net:: HTTP, вы можете сделать это следующим образом:

uri = URI(url)

request = Net::HTTP.new uri.host
response= request.request_head uri.path
return response.code.to_i == 200

Ответ 2

Сделайте что-то вроде этого

require "rest-client"

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

Тогда "существует" является булевым, зависящим от того, существует ли он или нет. Это будет получать информацию заголовка, а не файл, поэтому он должен быть одинаковым для небольших или больших файлов.

Ответ 3

Я бы написал так:

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.