Antworten:
Manchmal möchten Sie die zu sendenden Daten wörtlich angeben.
Die --data-binary
Option macht das.
-d @message.txt
wie in der anderen Antwort vorgeschlagen, kann insbesondere Ihre Zeilenumbrüche ändern. --data-binary
Auf der anderen Seite nicht - was wichtig ist, wenn Sie Ihre CRLF-Zeilenumbrüche für mehrteilige / Formulardaten behalten müssen, siehe: stackoverflow.com/questions/10765243/… )
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
Ihre Muschel geht vorbei, \
gefolgt von n
einer neuen Linie, die sich eher kräuselt als "my message\n"
. Bash unterstützt eine andere Zeichenfolgensyntax, die Escape-Sequenzen wie \n
und unterstützt \t
. Um es zu verwenden, beginnen Sie die Zeichenfolge mit $'
und beenden Sie die Zeichenfolge mit '
:
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Siehe ANSI-C-Angebot im Bash-Referenzhandbuch
my message\n
wörtlich vorbei , nicht mit zwei Fluchten, wie Sie sagen.
my message\n
ist dasselbe wie das, worauf ich mich beziehe "my message\n"
.
\n
hat nichts mit JavaScript zu tun. Tatsächlich hat hier überhaupt nichts mit JavaScript zu tun.
Es gibt einen viel einfacheren Weg!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Dies verwendet ANSI-C-Anführungszeichen , um das Zeilenumbruchzeichen einzufügen.
Keine Rohrleitungen, keine Datendateien. Siehe auch Senden von Zeilenumbrüchen mit cURL .
Die Lösung für jemanden, der keine Dateien verwenden möchte und nicht auf Shell-Fluchtmagie zurückgreifen möchte, lautet:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Dies sind jedoch wörtliche Zeilenumbrüche in der Postdaten-Nutzlast und nicht in Formularfeldern.
@
einen Dateinamen angibt, aber gibt es eine besondere Bedeutung bei der Verwendung @-
? Was <<EOF
macht das
@-
Weist Curl an, Eingaben von Standard-In zu verbrauchen, und <<EOF
ist der Indikator für das Ende des Streams für Bash. Wir verwenden dann später das Zauberwort EOF
in der Datennutzlast, um bash mitzuteilen, dass wir mit dem Schreiben in den Stream fertig sind.
-
ist eine Art der Standardmethode in GNU / Linux STDIN angeben , wenn ein Dateiname erwartet wird. Es ist nicht universell, aber es ist ziemlich häufig.
Hatte ein ähnliches Problem. Beim Hochladen der CSV-Datei vom Mac in den Cloud-Speicher wurden neue Zeilen entfernt. Nach dem Herunterladen sah die gesamte Datei wie eine einzelne Zeile aus. Ich habe versucht, verschiedene EOL-Zeichen '\ n' '\ r' '\ r \ n' ohne Erfolg hinzuzufügen. Die Verwendung von '--data-binary' anstelle von '-d' löste das Problem. Übrigens trat dieses Problem nur auf dem Mac auf. '-d' funktionierte einwandfrei, als der Anruf vom CentOS-Computer aus getätigt wurde. Dies sieht aufgrund des Newline-Charakters von Mac sehr ähnlich aus. Aber keine Lust mehr zu debuggen.
Vielen dank für Deine Hilfe.
curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"
VS
curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
--data-binary @
hat mein Problem behoben (Senden einer mehrzeiligen .ics-Datei an einen CalDAV-Server).
(Ich bin hier mit einer etwas anderen Frage gelandet, daher werde ich nur meine Antwort veröffentlichen, da dies zukünftigen Entdeckern helfen könnte.)
Meine Lösung gilt für Personen, die Daten im Formularstil senden, dh Schlüssel / Wert-Paare in einer Abfragezeichenfolge. Verwenden Sie den codierten Zeilenumbruch %0A
, genau wie ein codierter Leerzeichen %20
. Sie können http://meyerweb.com/eric/tools/dencoder/ verwenden , um andere Symbole zu konvertieren.
Wenn Sie also den Schlüssel message
auf den Wert setzen möchten :
line one
another
du würdest senden
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Keine Antwort auf Ihre Frage, aber ich würde sie umgehen, indem ich eine temporäre Datei mit der Nachricht und dem Zeilenumbruch erstelle und diese Datei zum Bearbeiten einrolle:
curl -X PUT -d @message.txt http://localhost:8000/hello
Aus dem Handbuch :
Wenn Sie die Daten mit dem Buchstaben @ beginnen, sollte der Rest ein Dateiname sein, aus dem die Daten gelesen werden sollen, oder - wenn Sie möchten, dass Curl die Daten aus stdin liest. Der Inhalt der Datei muss bereits URL-codiert sein. Es können auch mehrere Dateien angegeben werden. Das Posten von Daten aus einer Datei mit dem Namen "foobar" würde daher mit --data @foobar erfolgen.
--data-binary
ist dies eine getreuere Alternative zu -d
, da die Daten wörtlich gesendet werden.
-d @/path/to/temp/file.txt
löst das Zeilenumbruchproblem NICHT. --data-binary
tut, siehe oben.
Ein sehr einfacher Weg, einfach Shift-Enter in der Konsole für die Pause. Sehr gut lesbar.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Gehen Sie folgendermaßen vor, um den Zeilenumbruch zu entfernen:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
Ich habe Sendgrid mit diesem Code (unten kopiert) verwendet, der ursprünglich hier https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html gefunden wurde
\n\n
arbeitete in Google Mail, wurde aber \n
ignoriert. Ich habe versucht, die Flucht und andere Vorschläge zu verdoppeln. Ich habe es auch versucht \r\n
und das hat auch in Google Mail nicht funktioniert. Hinweis: Ich habe mich nicht darum gekümmert, andere E-Mail-Clients zu testen. Möglicherweise handelte es sich um ein Google Mail-spezifisches Problem.
curl --request POST \
--url https://api.sendgrid.com/v3/mail/send \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{"personalizations": [{"to": [{"email": "your.email@example.com"}]}],"from": {"email": "example@example.com"},"subject": "Hello, World!","content": [{"type": "text/plain", "value": "Heya!"}]}'
Schließlich gab ich die Suche nach einer Lösung auf und wechselte text/plain
zu text/html
und benutzte nur <br />
Tags.
Jemand schlug vor, dass Sendgrid Klartext in HTML konvertiert, wenn Sie ein Tracking-Pixel aktiviert haben, was sinnvoll ist. Möglicherweise wurden die Zeilenumbrüche bei der Konvertierung von Klartext in HTML zerstört. Ich gehe davon aus, dass der Client ein Tracking-Pixel haben möchte, und entschied sich daher, auf HTML umzusteigen.