Способы скручивания отправляют данные
С полями:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
С полями, указанными индивидуально:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Multipart:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Multipart с полями и именем файла:
curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi
Для RESTful HTTP POST, содержащего XML:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"
или для JSON, используйте это:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Будет прочитано содержимое файла с именем filename.txt и отправлено как запрос на публикацию.
Для получения дополнительной информации см.
Чтение данных HTTP POST с использованием BASH
Как получить длину контента:
if [ "$REQUEST_METHOD" = "POST" ]; then
if [ "$CONTENT_LENGTH" -gt 0 ]; then
read -n $CONTENT_LENGTH POST_DATA <&0
echo "$CONTENT_LENGTH"
fi
fi
Чтобы сохранить двоичный или текстовый файл:
boundary=$(export | \
sed '/CONTENT_TYPE/!d;s/^.*dary=//;s/.$//')
filename=$(echo "$QUERY_STRING" | \
sed -n '2!d;s/\(.*filename=\"\)\(.*\)\".*$/\2/;p')
file=$(echo "$QUERY_STRING" | \
sed -n "1,/$boundary/p" | sed '1,4d;$d')
Загруженный файл теперь содержится в переменной $ file, а имя файла - в переменной $ filename.