2015-12-17 2 views
1

настоящего времени я используюПолучить Content-Disposition имени файла без загрузки

curl -w "%%{filename_effective}" "http://example.com/file.jpg" -L -J -O -s 

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

ответ

1

Делают HEAD запрос в пакетный файл:

curl -w "%%{filename_effective}" "http://example.com/file.jpg" -I -X HEAD -L -J -O -s 

Таким образом, сам запрашиваемый файл не будет загружен, согласно RFC2616:

Метод ГОЛОВА идентичен GET, за исключением что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответ. (...) Этот метод может использоваться для получения метаинформации о сущности, подразумеваемой запросом, без передачи самого объекта-объекта.

Обратите внимание, что это создаст два файла, тем не менее, хотя и только с данными заголовка curl. Я понимаю, что ваш основной интерес - это не загрузка (потенциально много и/или больших) файлов, поэтому я думаю, что все должно быть в порядке.

Edit: На последующий вопрос о:

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

Похоже, что только curl, боюсь. Единственный способ, чтобы curl не выводил файл, - это -o NUL (Windows), и если вы это сделаете, %{filename_effective} станет NUL.

+0

Не работает. Он получил файл, загруженный два раза вместо него, один с именем файла из URL-адреса и именем файла содержимого. – zcalebz

+0

Хотя верно, что создаются два файла (оба содержат часть заголовка ответа), я был бы очень удивлен, увидев, что запрос 'HEAD' загружает что-либо. Вы проверили содержимое файла? – zb226

+0

Я проверил файлы, они на самом деле текстовые файлы, содержащие заголовок, если они открыты с помощью текстового редактора. Не существует ли способа получить только и только имя файла содержимого без загрузки вообще? – zcalebz