ファイル名を渡さずにカールとポストバイナリデータを使用できますか?たとえば、--data-binary を使用してバイナリ公開形式を使用できます。
curl -X POST --data-binary @myfile.bin http://foo.com
ただし、これにはファイルが存在する必要があります。リクエストを再現するために、HTTP呼び出し(残りのサービスなど)をカールコマンドのテキストとして記録できるようにしたいです。 (たとえば、これはこれらのサービスをデバッグするのに非常に役立ちます。)
しかし、ファイルを参照するカールコマンドを書き込むことは役に立たないので、実際には生のバイナリデータ(おそらくbase64でエンコードされている)を書き込むことができますが、書き込まれたカールコマンドをコピーして貼り付けて実行できることを願っています。
それでは、ファイルを参照せずにカールとポストバイナリデータを使用することは可能ですか?それでは、どのように機能しますか?例えば、どんな感じですか?
答え1
次のように、STDINを介してカールにデータを渡すことができます。
echo -e '...data...\n' | curl -X POST --data-binary @- http://foo.com
STDIN@-
からインポートするように指示します。curl
カールするバイナリデータパイプ(例:)
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
答え2
に追加するこれ答え、このecho
コマンドはデフォルトで出力に改行を追加します。これにより、\n
バイナリデータの末尾に1が追加されるため、カールもその文字を入力として受け取ります。
printf
これを防ぐには、次のコマンドまたはスイッチを使用できます-n
。
printf '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
または
echo -en '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
これにより、カールの入力に改行文字が追加されず、カールに渡されたバイトはカールに渡されたバイトとまったく同じですecho
。
答え3
理由はわかりませんが、slmが提案した正確なコマンドラインは機能しません。少し変更すると、次のようになります。
echo -e '...data...\n' | curl -s -T - sftp://[email protected]/~/test.txt