Назад | Перейти на главную страницу

Загрузить файл в Linux, если местоположение файла неизвестно

Извините, если это неясно, но я пытаюсь настроить скрипт, который загружает файл. В настоящее время я могу загрузить файл, щелкнув ссылку вроде этого:

https://www.URL.com/view?downloadFile=AcctItemFiles\1234567890.txt

Я пробовал использовать wget команда, но это явно не сработало, потому что эта ссылка не является фактическим местоположением файла. Любые идеи о том, как определить фактическое местоположение файла или как загрузить файл с этой ссылкой, были бы полезны.

wget у него не должно возникнуть проблем с его получением, поскольку он отлично выполняет команду GET для такого URL-адреса. Единственные проблемы, о которых я могу думать, это:

  • который \ - это специальный символ оболочки, и вам нужно будет заключить URL-адрес в кавычки, чтобы оболочка не преобразовывала \1 к 1. А еще лучше убежать \ персонажи как %5C
  • wget называет файл view?downloadFile=AcctItemFiles\1234567890.txt вместо чего-то разумного, как ваш веб-браузер. Либо используйте -O filename опция, чтобы заставить его записывать все загруженные данные в указанное имя файла, например

(интересно ... блок кода не может следовать за маркером)

wget -O 1234567890.txt "http://www.whatever.com/view?downloadFile=AcctItemFiles\1234567890.txt" 

Или используйте --content-disposition параметр, чтобы указать ему сохранить, используя имя файла, предоставленное сервером в заголовке (прочтите и поймите предупреждение о том, что он содержит ошибки и о том, что для этого требуется два запроса. Не используйте это, если целевой сценарий не поддерживает команду HEAD). использовать curl -O -J ... вместо wget, где -O -J вместе дают указание прочитать имя выходного файла из заголовка. В документации не сказано, что curl требует двух запросов, но curl недавно была уязвимость из-за доверия к недопустимым именам файлов, поэтому "глючный" все еще может применяться.

Попробуйте использовать curl с флагом '-L' вместо wget.

   -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.

Curl и wget дополняют друг друга.