@fileを使用せずにバイナリデータをカーリングに渡します。

@fileを使用せずにバイナリデータをカーリングに渡します。

ファイル名を渡さずにカールとポストバイナリデータを使用できますか?たとえば、--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

関連情報