Linux wget file upload

Linux command line tool for uploading files over HTTP as multipart/form-data?

It is possible to do this with wget only. At least with version 1.13.4 and maybe others. The —post-file option allows you to specify a file to send, so long as the postdata file is constructed properly.

I have also tested this with binary files and it works as expected. You do NOT need to base64 encode the file, but you do need to ensure your file does not contain the boundary.

The minimum command required to make this work would be:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform 

and the postdata file would need to contain something like:

--FILEUPLOAD Content-Disposition: form-data; name="comment" I love uploading files! --FILEUPLOAD Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; Content-Type: application/octet-stream Media Type: application/octet-stream Give me some automated file upload action! --FILEUPLOAD-- 

A number of details are important here:

  1. Lines in the post data file are terminated with \r\n. The only exception is data inside the file context.
  2. Every BOUNDARY attribute in the postdata must match the BOUNDARY value in the call to wget. (FILEUPLOAD in the example)
  3. All boundaries are prefixed with two hyphens «—» and terminated with \r\n
  4. The last boundary is suffixed with two extra hyphens «—» and terminated with \r\n
  5. Each piece of data, file content or parameter value, is surrounded by an empty line «\r\n»

I thought this might help someone since some controlled environments have wget but not curl.

Источник

Post request with Wget?

I want to use wget to upload a picture to a distant server, using an authentication token, ‘AUTH_1624582364932749DFHDD’, to the ‘test’ folder. This command doesn’t work (authorization failed), and I want to make sure that it’s not about syntax:

wget --post-file=nature.jpg http://ipadress:8080/v1/AUTH_test/test/ --post-data="AUTH_1624582364932749DFHDD" 

1 Answer 1

Wget currently doesn’t not support «multipart/form-data» data. —post-file is not for transmitting files as form attachments, it expects data with the form: key=value&otherkey=example . It is actually possible to post other formats (json) if you send the corresponding header.

Читайте также:  Лучшая версия ядра linux

—post-data and —post-file work the same way: the only difference is that —post-data allows you to specify the data in the command line, while —post-file allows you to specify the path of the file that contain the data to send.

 --post-data=string --post-file=file Use POST as the method for all HTTP requests and send the specified data in the request body. --post-data sends string as data, whereas --post-file sends the contents of file. Other than that, they work in exactly the same way. In particular, they both expect content of the form "key1=value1&key2=value2", with percent-encoding for special characters; the only difference is that one expects its content as a command-line parameter and the other accepts its content from a file. In particular, --post-file is not for transmitting files as form attachments: those must appear as "key=value" data (with appropriate percent-coding) just like everything else. Wget does not currently support "multipart/form-data" for transmitting POST data; only "application/x-www-form-urlencoded". Only one of --post-data and --post-file should be specified. 

Regarding your authentication token, it should either be provided in the header, in the path of the url, or in the data itself. This must be indicated somewhere in the documentation of the service you use. In a POST request, as in a GET request, you must specify the data using keys and values. This way the server will be able to receive multiple information with specific names. It’s similar with variables.

Hence, you can’t just send a magic token to the server, you also need to specify the name of the key. If the key is «token», then it should be token=YOUR_TOKEN .

wget --post-data 'user=foo&password=bar' http://example.com/auth.php 

Also, you should consider using curl if you can because it is easier to send files using it. There are many examples on the Internet for that.

Читайте также:  Realtek drivers kali linux

Источник

Как закачать файл (архив) на сервер Linux с помощью команды wget

Для того, чтобы закачать файл на удалённый сервер есть масса способов. Пожалуй, самый безумный, который можно придумать, это вбить его ручками с клавиатуры, но это долго и мучительно. Самый распространённый способ — это залить файл на сервер с помошью ftp-клиента на удалённом компьютере. В этой статье рассмотрим утилиту wget , которая позволяет скачивать файлы (и даже целые сайты) к себе на удалённый сервер. wget чаще всего используется для закачки дистрибутивов или ключей из репозиториев на сервер с оперционкой семейства *nix.

Синтаксис и опции wget

Для детального ознакомления с утилитой wget нужно потратить массу времени. Поэтому проще всего вызвать помощь по ней непосредственно в консоли сервера и начать именно с этого:

Если этого окажется мало, то можно почитать более подробный мануал:

Но для того, чтобы закачать дистрибутив на сервер потребуется всего лишь малая толика из этой лавины информации. Поэтому приведу лишь официальную информацию о синтаксисе вызова этой процедуры:

Загрузка файла на сервер linux командой wget

Рассмотрим самый простой случай. Есть дистрибутив Joomla, лежащий в официальном репозитории. Требуется его скачать для последующей установки.

  1. Заходим в нужную директорию у себя на сервере, куда нужно скачать этот дистрибутив
  2. Набираем команду: wget https://downloads.joomla.org/cms/joomla3/3-9-6/Joomla_3-9-6-Stable-Full_Package.zip
  3. Архив скачивается в ту папку, из которой произошёл вызов.
  4. Если файл по указанному адресу, то скачивание сопровождается подробной информацией (вплоть до статус-бара, показывающего в режиме реального времени того, сколько процентов скачено):
[email protected]:~# wget https://downloads.joomla.org/cms/joomla3/3-9-6/Joomla_3-9-6-Stable-Full_Package.zip --2019-05-17 23:46:28-- https://downloads.joomla.org/cms/joomla3/3-9-6/Joomla_3-9-6-Stable-Full_Package.zip Resolving downloads.joomla.org (downloads.joomla.org). 72.29.124.146 Connecting to downloads.joomla.org (downloads.joomla.org)|72.29.124.146|:443. connected. HTTP request sent, awaiting response. 303 See Other Location: https://s3-us-west-2.amazonaws.com/joomla-official-downloads/joomladownloads/joomla3/Joomla_3.9.6-Stable-Full_Package.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZ6S3Q3YQHG57ZRA%2F20190517%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20190517T204621Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&X-Amz-Signature=6a16c05547e770b6665bb7f5670f60acccc113712478c45fb05b23890b1cb958 [following] --2019-05-17 23:46:30-- https://s3-us-west-2.amazonaws.com/joomla-official-downloads/joomladownloads/joomla3/Joomla_3.9.6-Stable-Full_Package.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIZ6S3Q3YQHG57ZRA%2F20190517%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20190517T204621Z&X-Amz-Expires=60&X-Amz-SignedHeaders=host&X-Amz-Signature=6a16c05547e770b6665bb7f5670f60acccc113712478c45fb05b23890b1cb958 Resolving s3-us-west-2.amazonaws.com (s3-us-west-2.amazonaws.com). 52.218.248.8 Connecting to s3-us-west-2.amazonaws.com (s3-us-west-2.amazonaws.com)|52.218.248.8|:443. connected. HTTP request sent, awaiting response. 200 OK Length: 13931139 (13M) [application/zip] Saving to: ‘Joomla_3-9-6-Stable-Full_Package.zip’ Joomla_3-9-6-Stable-Full_Package.zip 100%[====================================================================================>] 13.29M 4.06MB/s in 3.3s 2019-05-17 23:46:34 (4.06 MB/s) - ‘Joomla_3-9-6-Stable-Full_Package.zip’ saved [13931139/13931139]​

Как загрузить файл на сервер linux с другим именем с помощью утилиты wget с опцией -O

Файлы, лежащие в удалённых хранилищах могут иметь названия, которые хочется поменять для того, чтобы они лежали у себя на сервере под другими именами. Можно конечно сперва скачать файл на сервер так, как показано в примере выше, а потом переименовать его, но wget позволяет сохранять загружаемые файлы и сразу присваивать им те имена, которые требуются, например:

wget -O joomla.zip https://downloads.joomla.org/cms/joomla3/3-9-6/Joomla_3-9-6-Stable-Full_Package.zip
  • Где:
    • wget – вызов утилиты wget
    • -O — опция, которая служит указанием того, что скачиваемому файлу требуется задать другое имя
    • joomla.zip — имя файла, под которым он будет сохранён после скачивания
    • Joomla_3-9-6-Stable-Full_Package.zip — изначальное имя файла, которое было бы использовано, не примени мы опцию -O утилиты wget

    Указание пути сохранения скачиваемого утилитой wget файла с помощью опции -P

    Ну и последнее, что рассмотрим в этой статье, это то, как сохранить файл с помощью утилиты wget с удалённого места на сервер с указанием пути, по которому его нужно сохранить. Этого можно достичь, применив опцию -P в следующем формате:

    wget -P ~/Downloads/ https://downloads.joomla.org/cms/joomla3/3-9-6/Joomla_3-9-6-Stable-Full_Package.zip
    • Где
      • -P – опция, которая служит для указания того, что будет указан путь, по которому должно произойти сохранение скачиваемого файла
        • примечательным служит то, что если указанных папок на сервере на момент сохранения нет, то они будут созданы

        Резюме

        Таким образом утилитой wget можно скачать и сохранить файл в нужном месте на сервере с нужным именем. Остальные опции мне пока не нужны. =)

        Пример использования в видео-инструкции:

        Заберите ссылку на статью к себе, чтобы потом легко её найти!
        Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
        Не надо себя сдерживать! 😉

        Источник

Оцените статью
Adblock
detector