Проверить, существует ли веб-файл, не загружая его?

#ruby

#ruby

Вопрос:

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

Например, у меня есть этот большой (~ 40 МБ) файл:

http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm

Это не имеет строгого отношения к ruby, но было бы неплохо, если бы отправитель мог установить длину содержимого.

 RestClient.get "http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm", 
               headers: {"Content-Length" => 100}
  

Ответ №1:

Попробуйте RestClient.head . (См https://www.rfc-editor.org/rfc/rfc9110.html#name-head )

Метод HTTP HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН отправлять содержимое в ответе. HEAD используется для получения метаданных о выбранном представлении без передачи данных его представления, часто ради тестирования гипертекстовых ссылок или поиска последних изменений.

RFC 9110 HTTP Семантика

Комментарии:

1. Да, и прошло 15 секунд, прежде чем я смог дать вам согласие . 🙂

Ответ №2:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

См. Раздел 9.4, касающийся запроса HEAD .

Ответ №3:

Мы можем использовать wget:

   def file_exists?(full_file_path)
      resp = `wget --spider -v #{full_file_path} amp;amp; echo 1 || echo 0`
      resp.to_i.zero? ? false : true
  end