Есть ли способ получить размер удаленного файла, не загружая его?
Можно ли вообще получить размер удаленного файла, не загружая его? Файл через HTTP, а не (S)FTP. Я хочу знать это, потому что я хочу скачать что-то, когда вы подключены с ограниченным тарифным планом 3G, и я не хочу использовать всю мою пропускную способность в одном месте. У меня нет доступа к серверу, вообще. Так что я ничего не могу сделать на стороне сервера. Я использую Mac OS X. Решения, использующие командную строку, являются плюсом, но не обязательны.
Кстати, конкретный файл, для которого я хочу получить информацию, - это загрузка MP3 с этого сайта.
3 ответа
Вы можете сделать это, получив Content-Length
заголовок, пока это HTTP.
Один из способов сделать это в командной строке curl
, например:
chris@chris-laptop:~$ curl -I -L http://www.fakkelbrigade.eu/chris/movies/drosovol1_final_h264_download.mp4
HTTP/1.1 200 OK
Date: Tue, 25 Jan 2011 22:22:51 GMT
Server: Apache/2.2.16 (Debian)
Last-Modified: Tue, 11 Jan 2011 16:32:52 GMT
ETag: "3aa003-1b0c3479-49994a2c6f500"
Accept-Ranges: bytes
Content-Length: 453784697
Content-Disposition: attachment
Content-Type: application/octet-stream
Content-Length
в байтах.
Вы можете оформить HTTP HEAD
просит получить только данные заголовка. Content-Length
это то, что вы хотите.
$ telnet usersuper.ru 80
Trying 64.34.119.12...
Connected to usersuper.ru.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 302 Found
Content-Length: 141
Location: http://stackexchange.com
Date: Tue, 25 Jan 2011 22:21:28 GMT
Connection: close
Это зависит от того, как настроен сервер и файл. С большинством файлов сервер отправляет его в заголовках, но это может быть динамический файл, и поэтому он не знает (и ваш браузер не может угадать, сколько времени это займет.
tobylane $ telnet stackexchange.com 80
Попытка 64.34.119.12...
Подключен к stackexchange.com.
Escape-символ '^]'.
ПОЛУЧИТЬ /
HTTP / 1.1 302 найдено
Расположение: http://stackexchange.com/
Дата: вторник, 25 января 2011 г. 22:01:22 GMT
Подключение: закрыть
Я не уверен, что хороший запрос (GET / работал на других сайтах), но я надеюсь, что это помогает.