2014-01-04 4 views
0

Bash n00b здесь .. Я отправляю файл B64 закодированные как это с помощью завитка:POST данных с завитком

$ cat file.txt | openssl base64 | curl --data @- myhost.com/api 

работает хорошо. Я разделяю ключ/значение на стороне сервера, все сообщение переходит в ключ, но это нормально, я разбираю его и конвертирую в ascii и т. Д. На сервер.

Как добавить в сообщение другие ключи/значения? Что-то вроде ..

$ cat file.txt | openssl base64 | PREPEND "key=value1&key2&value2&btext=" | curl --data @- myhost.com/api 
+0

Возможный дубликат [HTTP POST и GET с использованием cURL в Linux] (http://stackoverflow.com/questions/14978411/http-post-and-get-using-curl-in-linux) – AndRSoid

+0

Парни/девушки - прежде чем вы удалите дубликат по этому вопросу. Это вопрос Bash, а не вопрос Curl, и не является основным вопросом о том, как POST в Curl, который является цитируемой статьей, и в другой статье ответа не получено. –

ответ

4

Вы можете создать все вход свернуться в субоболочке, например, так:

(echo -n "key=value1&key2=value2&btext="; openssl base64 < file.txt) | curl --data @- myhost.com/api 

Это будет выполнять echo и openssl после друг друга и передать каскадный выход на curl.

+0

Отлично, спасибо. –

+0

Вы можете использовать 'echo -n' для предотвращения новой строки между' btext = 'и данными base64. – buc

2

Вместо @ - вы можете использовать -F для размещения как ваших добавленных ключей, так и текста base64.

curl -F key=value1 -F key2=value2 -F btext=$(openssl base64 < file.txt | tr -d "\n") myhost.com/api 

В моем тестировании, base64 не будут отправлены правильно, если не удалить переносы строк, и ни -F, ни @ - (?> ~ 50kb) будет работать для особо больших файлов.

+2

Можете ли вы дать описание этого? Ваш ответ в настоящее время неполный. – bjb568

+0

@ - относится к использованию в ответе Шона (piping btext в | curl --data @ - вместо того, чтобы писать его с помощью $ (подоболочки)). Предел> ~ 50 кб - это то, что я считаю максимальным размером команды bash vel alii. – ride

Смежные вопросы