Apakah mungkin menggunakan curl dan memposting data biner tanpa mengirimkan nama file? Misalnya, Anda dapat memposting formulir menggunakan biner melalui --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
Namun, ini mensyaratkan bahwa ada file. Saya berharap dapat mencatat panggilan HTTP (seperti untuk mengembalikan layanan) sebagai teks dari perintah curl untuk mereproduksi permintaan. (ini sangat membantu men-debug layanan ini, misalnya)
Namun, logging perintah curl yang mereferensikan file tidak akan berguna, jadi saya berharap saya benar-benar bisa mencatat data biner mentah, mungkin base64 yang dikodekan, namun masih memungkinkan Anda untuk menyalin dan menempelkan perintah curl yang dicatat dan menjalankannya.
Jadi, apakah mungkin menggunakan curl dan mengirim data biner tanpa merujuk file? Jika demikian, bagaimana cara kerjanya? Seperti apa contohnya?
Jawaban:
Anda dapat mengirimkan data ke curl melalui STDIN seperti:
The
@-
Tellscurl
untuk menarik dari STDIN.Untuk menyalurkan data biner ke ikal (misalnya):
sumber
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
Di mana\x03\xF1
data biner mentah sebagai heksadesimal, yang persis seperti yang saya inginkan.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Bekerja seperti pesona. Untuk memvalidasi, saya juga mencoba:cat 1.jpg | md5sum
danmd5sum 1.jpg
. Mereka berdua mengembalikan nilai yang sama.Tidak yakin mengapa, tetapi baris perintah persis yang disarankan slm tidak bekerja untuk saya. Dengan sedikit modifikasi, berikut ini berfungsi:
sumber
Menambahkan ke jawaban ini ,
echo
perintah menambahkan baris baru ke outputnya secara default. Ini menambahkan a\n
ke akhir data biner Anda, oleh karena itu curl akan menerima karakter itu juga sebagai input.Untuk menghindari itu, Anda dapat menggunakan
printf
perintah atau-n
sakelar seperti:atau
Dengan cara ini, tidak ada baris baru akan ditambahkan ke input curl dan byte yang diumpankan ke curl akan persis seperti yang Anda berikan
echo
.sumber