Сохранить файл на сервере с помощью команды curl, используя метод post, например scp? [дубликат]

Оказывается, adduser отстой, если вы попытаетесь использовать его в автономном скрипте. В итоге я использовал старый добрый useradd , который полностью исправил мой сценарий ниже.

#!/bin/bash

PASSWORD="somepassword"
USERNAME="default"

if id -u "$USERNAME" >/dev/null 2>&1; then
    userdel -r -f $USERNAME
    useradd -m -p $PASSWORD -s /bin/bash $USERNAME
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd

else
    useradd -m -p $PASSWORD -s /bin/bash $USERNAME
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd
fi
1
28.09.2018, 12:05
1 ответ

Можно использовать протокол HTTP для загрузки файлов на сервер, а также использовать curlдля этого из командной строки.

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

Если это все на месте, у вас есть два способа использовать curlдля загрузки файлов по HTTP:

  1. Метод PUT:

Это родной «глагол» для загрузки файлов. Одним из преимуществ является то, что URL-адрес, который вы используете для загрузки, совпадает с URL-адресом, по которому загруженный файл должен быть доступен после загрузки. Но, как упоминалось выше, вам нужно, чтобы ваш сервер поддерживал загрузку файлов с использованием этого метода, чтобы это работало.

Если это возможно,используйте следующий синтаксис:

cat tmp.txt | curl -T - domain.com/file-to-store
  1. Метод POST:

Это способ вызвать приложение, работающее на веб-сервере, которое может реализовывать загрузку файлов... В этом случае вам нужно вызвать URL-адрес самого приложения, поэтому обычно вам нужно закодировать ожидаемую цель URL-адрес или имя файла в качестве отдельного аргумента («поле» ), передаваемое в POST-запросе.

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

Если это опция, используйте такой синтаксис, как:

curl -F file=@tmp.txt -F url=/file-to-store domain.com/fileupload.cgi

Обратите внимание, что приведенный выше пример не является буквальным, а является просто иллюстрацией гипотетического приложения для загрузки файлов... Фактические детали будут зависеть от того, какое приложение для загрузки файлов вы решите использовать и какое оно будет доступно. Смысл этого примера в том, чтобы проиллюстрировать использование аргумента curl -Fи использование @для включения содержимого локального файла при его использовании.

Подробную информацию см. в руководстве curl , особенно в разделе «Загрузка», в котором описывается метод PUT. В нем также упоминается использование POST в качестве опции.

3
27.01.2020, 23:31

Теги

Похожие вопросы