Ist es möglich, Curl zu verwenden und Binärdaten zu posten, ohne einen Dateinamen einzugeben? Beispielsweise können Sie ein Formular mit Binärdaten über --data-binary veröffentlichen:
curl -X POST --data-binary @myfile.bin http://foo.com
Dies setzt jedoch voraus, dass eine Datei vorhanden ist. Ich hatte gehofft, in der Lage zu sein, HTTP-Aufrufe (z. B. zum Wiederherstellen von Diensten) als Text des Befehls curl zu protokollieren, um die Anforderung zu reproduzieren. (Dies erleichtert beispielsweise das Debuggen dieser Dienste erheblich.)
Das Protokollieren von Curl-Befehlen, die auf eine Datei verweisen, ist jedoch nicht sinnvoll. Daher hatte ich die Hoffnung, die rohen Binärdaten, die vermutlich base64-codiert sind, tatsächlich protokollieren zu können, und Sie können dennoch den protokollierten Curl-Befehl kopieren, einfügen und ausführen.
Ist es also möglich, Curl und Post-Binärdaten zu verwenden, ohne auf eine Datei zu verweisen? Wenn ja, wie würde das funktionieren? Wie würde ein Beispiel aussehen?
Antworten:
Sie können Daten wie folgt über STDIN in curl übergeben:
Das
@-
sagtcurl
, dass man von STDIN einsteigen soll.So leiten Sie Binärdaten zum Einrollen weiter (zum Beispiel):
quelle
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
wo\x03\xF1
sind die rohen Binärdaten als Hexadezimal, was ziemlich genau das ist, was ich will.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Lief wie am Schnürchen. Zur Bestätigung habe ich auch versucht:cat 1.jpg | md5sum
undmd5sum 1.jpg
. Sie gaben beide den gleichen Wert zurück.Ich weiß nicht warum, aber die genaue Befehlszeile, die slm vorschlug, funktionierte bei mir nicht. Mit einer geringfügigen Änderung funktionierte Folgendes:
quelle
Zusätzlich zu dieser Antwort, der
echo
anfügt Befehl eine neue Zeile zu seinem Ausgang standardmäßig. Dies fügt ein\n
an das Ende Ihrer Binärdaten an. Daher erhält curl dieses Zeichen auch als Eingabe.Um dies zu vermeiden, können Sie den
printf
Befehl oder den-n
Schalter folgendermaßen verwenden:oder
Auf diese Weise wird keine neue Zeile an den Curl-Eingang angehängt, und die dem Curl zugeführten Bytes entsprechen genau denen, die Sie übergeben haben
echo
.quelle