Клуб API Диска

Скачивание файла REST API

11 марта 2016, 15:38

Получил ссылку на скачивание файла с помощью GET /v1/disk/resources/download, токен указал - все по документации. Когда вставляю эту ссылку в адресную строку браузера - файл скачивается. Когда пытаюсь скачать через curl:

curl -s -H "Authorization: OAuth <token>" https://downloader.disk.yandex.ru/disk/...

получаю следующее

$ curl -s -H "Authorization: OAuth <token>" https://downloader.disk.yandex.ru/disk/... 
[1] 13849
[2] 13850
[3] 13851
[4] 13852
[5] 13853
[6] 13854
[7] 13855
[8] 13856
[9] 13857
[10] 13858
[2]   Done                    filename=<Имя_запрашиваемого_файла>
[3]   Done                    disposition=attachment
[4]   Done                    hash=
[5]   Done                    limit=0
[6]   Done                    content_type=application%2Foctet-stream
[7]   Done                    fsize=8
[8]   Done                    hid=07d159f...
[9]-  Done                    media_type=data
[10]+  Done                    tknv=v2
:~/path $ 
$ HTTP 422
No parameter: filename

Что я делаю не так? Как передать этот параметр 'filename' ?

3 комментария
Нужно url поместить в кавычки:
curl -s "https://downloader.disk.yandex.ru/disk/..."
Вы правы, но скачать файл мне это так и не помогло, идет перенаправление 302 на другой хост - оттуда загрузки не происходит. Зато выкачивается wget'ом
Попробуйте использовать флаг -L
-L, --location
(HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this
option will make curl redo the request on the new place. If used together with -i, --include or -I, --head, headers from all requested pages will be shown.
When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to intercept
the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to follow by using the --max-redirs option.

When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response
was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.