J'ai essayé ce qui suit pour envoyer un saut de ligne avec curl, mais \n
n'est pas interprété par curl.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Comment puis-je envoyer un saut de ligne avec curl?
Réponses:
Parfois, vous souhaitez fournir les données à envoyer textuellement.
L' --data-binary
option fait cela.
-d @message.txt
comme suggéré dans l'autre réponse en particulier peut modifier vos sauts de ligne. --data-binary
d'autre part ne le sera pas (ce qui est important si vous devez conserver vos sauts de ligne CRLF pour multipart / form-data, voir: 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
Votre shell passe \
suivi par n
plutôt qu'une nouvelle ligne à boucler plutôt que "my message\n"
. Bash prend en charge une autre syntaxe de chaîne qui prend en charge les séquences d'échappement telles que \n
et \t
. Pour l'utiliser, commencez la chaîne par $'
et terminez la chaîne par '
:
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Voir Citations ANSI-C dans le manuel de référence de Bash
my message\n
mot pour mot, pas avec deux échappements comme vous le dites.
my message\n
est le même que ce à quoi je fais référence "my message\n"
.
\n
n'a rien à voir avec JavaScript. En fait, rien ici n'a rien à voir avec JavaScript.
Il existe un moyen beaucoup plus simple!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Cela utilisera la citation ANSI-C pour insérer le caractère de nouvelle ligne.
Pas de tuyauterie, pas de fichiers de données. Voir aussi Envoi de nouvelles lignes avec cURL .
La solution pour quelqu'un qui ne veut pas utiliser de fichiers et qui ne veut pas recourir à la magie échappant au shell est:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Mais il s'agit de retours à la ligne littéraux dans la charge utile des données de publication, et non dans les champs de formulaire.
@
c'est pour indiquer un nom de fichier, mais y a-t-il une signification particulière lors de l'utilisation @-
? Que <<EOF
fais-tu?
@-
dit à curl de consommer les entrées du standard in, et <<EOF
est l'indicateur de fin de flux pour bash. Nous utilisons ensuite le mot magique EOF
dans la charge utile de données pour dire à bash que nous avons fini d'écrire dans le flux.
-
c'est une sorte de méthode standard dans GNU / Linux pour spécifier STDIN lorsqu'un nom de fichier est attendu. Ce n'est pas universel, mais c'est assez courant.
(Je me suis retrouvé ici avec une question légèrement différente, donc je vais juste poster ma réponse car cela pourrait aider les futurs explorateurs)
Ma solution s'applique aux personnes qui envoient des données de type formulaire, c'est-à-dire des paires clé / valeur dans une chaîne de requête. Utilisez le saut de ligne codé, qui %0A
ressemble à la façon dont un espace codé est %20
. Vous pouvez utiliser http://meyerweb.com/eric/tools/dencoder/ pour convertir d'autres symboles.
Donc, si vous souhaitez définir la clé message
sur la valeur:
line one
another
vous enverriez
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Eu un problème similaire. Lors du téléchargement du fichier csv du Mac vers le stockage en nuage, de nouvelles lignes ont été supprimées. Après l'avoir téléchargé, le fichier entier ressemblait à une seule ligne. J'ai essayé d'ajouter différents caractères EOL '\ n' '\ r' '\ r \ n' sans succès. L'utilisation de '--data-binary' au lieu de '-d' a résolu le problème. Btw ce problème s'est produit uniquement à partir de Mac. «-d» a très bien fonctionné lors de l'appel depuis la machine CentOS. Cela ressemble beaucoup au caractère de nouvelle ligne de Mac. Mais n'ayez plus envie de déboguer.
Merci beaucoup pour votre aide.
curl -X PUT -d @filename.csv https://cloudstorage -H "content-type: text/csv"
CONTRE
curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
--data-binary @
a résolu mon problème (envoyer un fichier .ics multiligne à un serveur CalDAV).
Ce n'est pas une réponse à votre question, mais je la contournerais en créant un fichier temporaire contenant le message et le saut de ligne, et en donnant à curl ce fichier sur lequel travailler:
curl -X PUT -d @message.txt http://localhost:8000/hello
À partir du manuel :
Si vous commencez les données par la lettre @, le reste doit être un nom de fichier à partir duquel lire les données, ou - si vous voulez que curl lise les données depuis stdin. Le contenu du fichier doit déjà être encodé en URL. Plusieurs fichiers peuvent également être spécifiés. La publication de données à partir d'un fichier nommé 'foobar' se ferait donc avec --data @foobar.
--data-binary
est une alternative plus fidèle à -d
, car elle enverra les données textuellement.
-d @/path/to/temp/file.txt
ne résout PAS le problème de saut de ligne. --data-binary
fait, voir ci-dessus.
Un moyen très simple, il suffit de Shift-Enter dans la console pour la pause. Très lisible en le tapant aussi.
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
Faites ceci pour supprimer le saut de ligne:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
J'utilisais Sendgrid avec ce code (copié ci-dessous) trouvé à l'origine ici https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\n
a travaillé dans Gmail, mais a \n
été ignoré. J'ai essayé de doubler l'évasion et d'autres suggestions. J'ai également essayé \r\n
et cela ne fonctionnait pas non plus dans Gmail. Remarque: je n'ai pas pris la peine de tester d'autres clients de messagerie, c'était peut-être un problème spécifique à Gmail.
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!"}]}'
Finalement, j'ai abandonné la recherche d'une solution et j'ai basculé les balises text/plain
à text/html
et juste utilisé <br />
.
Quelqu'un a suggéré que Sendgrid convertisse le texte brut en HTML si vous avez activé un pixel de suivi, ce qui est logique. Peut-être que les nouvelles lignes ont été détruites dans le processus de conversion du texte brut en html. Je suppose que le client veut un pixel de suivi, alors j'ai décidé de passer au HTML.