Próbowałem wykonać następujące czynności, aby wysłać przerwanie linii z zawinięciem, ale \nnie jest interpretowane przez zawijanie.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Jak mogę wysłać łamanie linii z zawijaniem?
Próbowałem wykonać następujące czynności, aby wysłać przerwanie linii z zawinięciem, ale \nnie jest interpretowane przez zawijanie.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Jak mogę wysłać łamanie linii z zawijaniem?
Odpowiedzi:
Czasami chcesz podać dane do wysłania dosłownie.
Ta --data-binaryopcja to robi.
-d @message.txtsugerowana w szczególności w drugiej odpowiedzi może zmienić podziały wierszy. --data-binaryz drugiej strony nie (co jest ważne, jeśli chcesz zachować
curl -H "Content-Type:text/plain" --data-binary "$(<myfile)" http://localhost:8888
curl --data-binary @/path/to/file.txt http://example.com/target
Twoja skorupa przechodzi \następnie nzamiast nowej linii do zwijania zamiast "my message\n". Bash obsługuje inną składnię ciągu, która obsługuje sekwencje ucieczki, takie jak \ni \t. Aby go użyć, rozpocznij ciąg od $'i zakończ ciąg ':
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Zobacz cytowanie ANSI-C w podręczniku Bash Reference Manual
my message\ndosłownie, a nie z dwoma ucieczkami, jak mówisz.
my message\njest tym samym, co ja nazywam "my message\n".
\nnie ma nic wspólnego z JavaScriptem. W rzeczywistości nic tutaj nie ma nic wspólnego z JavaScriptem.
Jest o wiele łatwiejszy sposób!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Spowoduje to użycie cytowania ANSI-C do wstawienia znaku nowego wiersza.
Bez rurociągów, bez plików danych. Zobacz także Wysyłanie nowych linii z cURL .
Rozwiązaniem dla kogoś, kto nie chce używać plików i nie chce uciekać się do magii ucieczki powłoki, jest:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Ale to są dosłowne znaki nowej linii w ładunku danych post, a nie w polach formularza.
@ma to wskazywać nazwę pliku, ale czy ma jakieś specjalne znaczenie podczas używania @-? Co <<EOFrobisz?
@-mówi curl, aby konsumował dane wejściowe ze standardu in i <<EOFjest wskaźnikiem końca strumienia dla bash. Następnie używamy magicznego słowa EOFw ładunku danych, aby powiedzieć bashowi, że skończyliśmy pisać do strumienia.
-w systemie GNU / Linux jest to standardowy sposób określania STDIN, gdy oczekiwana jest nazwa pliku. Nie jest uniwersalny, ale jest dość powszechny.
Miałem podobny problem. Podczas przesyłania pliku csv z komputera Mac do chmury usuwano nowe wiersze. Po pobraniu cały plik wyglądał jak jedna linia. Próbowałem dodać różne znaki EOL '\ n' '\ r' '\ r \ n' bez powodzenia. Użycie „--data-binary” zamiast „-d” rozwiązało problem. Przy okazji ten problem wystąpił tylko z komputerów Mac. „-d” działało dobrze podczas wykonywania połączenia z komputera CentOS. To bardzo wygląda ze względu na znak nowej linii Maca. Ale nie chcę już debugować.
Bardzo dziękuję za Twoją pomoc.
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 @rozwiązało mój problem (wysłanie pliku wielowierszowego .ics na serwer CalDAV).
(Skończyłem z nieco innym pytaniem, więc po prostu opublikuję swoją odpowiedź, ponieważ może to pomóc przyszłym odkrywcom)
Moje rozwiązanie dotyczy osób, które wysyłają dane w formie formularza, tj. Pary klucz / wartość w ciągu zapytania. Użyj zakodowanego podziału wiersza, czyli %0Atakiego samego, jak zakodowana spacja %20. Możesz użyć http://meyerweb.com/eric/tools/dencoder/, aby przekonwertować inne symbole.
Więc jeśli chcesz ustawić klucz messagena wartość:
line one
another
wysłałbyś
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Nie jest to odpowiedź na twoje pytanie, ale obejdę to, tworząc tymczasowy plik zawierający wiadomość i podział wiersza, i daję curlowi ten plik do pracy:
curl -X PUT -d @message.txt http://localhost:8000/hello
Z instrukcji :
Jeśli zaczynasz dane od litery @, reszta powinna być nazwą pliku, z którego dane będą odczytywane, lub - jeśli chcesz, aby curl odczytał dane ze stdin. Zawartość pliku musi być już zakodowana w formacie URL. Można również określić wiele plików. Wysyłanie danych z pliku o nazwie „foobar” odbywałoby się zatem za pomocą opcji --data @foobar.
--data-binaryjest bardziej wierną alternatywą -d, ponieważ przesyła dane dosłownie.
-d @/path/to/temp/file.txtNIE rozwiązuje problemu łamania linii. --data-binaryrobi, patrz wyżej.
Bardzo łatwy sposób, po prostu Shift-Enter w konsoli na przerwę. Bardzo czytelne wpisywanie.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Zrób to, aby usunąć podział wiersza:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
Używałem Sendgrid z tym kodem (skopiowanym poniżej) pierwotnie znalezionym tutaj https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\ndziałał w Gmailu, ale \nzostał zignorowany. Próbowałem podwoić ucieczkę i inne sugestie. Próbowałem też \r\ni to też nie działało w Gmailu. Uwaga: nie zawracałem sobie głowy testowaniem innych klientów poczty e-mail, być może był to problem związany z Gmailem.
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!"}]}'
W końcu dałem się szuka rozwiązania i włączeniu text/plaindo text/htmli po prostu używane <br />tagi.
Ktoś zasugerował, że Sendgrid konwertuje zwykły tekst na HTML, jeśli masz włączony piksel śledzący, co ma sens. Być może znaki nowej linii zostały zniszczone w procesie konwersji zwykłego tekstu na HTML. Zakładam, że klient chce piksela śledzącego, więc zdecydował się przejść na HTML.