web-dev-qa-db-fra.com

Comment envoyer un saut de ligne avec curl?

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?

80
deamon

Parfois, vous souhaitez fournir les données à envoyer textuellement.

Le --data-binary option fait cela.

98
Szocske

Votre Shell passe \ suivi de n plutôt que d’une nouvelle ligne à boucler plutôt que "my message\n". Bash prend en charge une autre syntaxe de chaîne prenant en charge les séquences d'échappement telles que \n et \t. Pour l'utiliser, démarrez la chaîne avec $' et terminer la chaîne avec ':

curl -X PUT -d $'my message\n' http://localhost:8000/hello

Voir Citations ANSI-C dans le Manuel de référence Bash

36
Benjamin Atkin

La solution pour quelqu'un qui ne veut pas utiliser de fichiers et ne veut pas recourir à Shell pour échapper à la magie est la suivante:

curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF

Mais il s’agit de sauts de ligne littéraux dans la charge de données post, et non dans les champs de formulaire.

15
Jammer

Il y a un moyen beaucoup plus facile!

curl -X PUT -d $'my message\n' http://localhost:8000/hello

Ceci utilisera ANSI-C Quotation 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 .

13
Dave Kerr

(Je me suis retrouvé ici avec une question légèrement différente, alors je vais simplement 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 est %0A, tout comme un espace codé est %20. Vous pouvez utiliser http://meyerweb.com/eric/tools/dencoder/ pour convertir d'autres symboles.

Donc, si vous voulez définir la clé message sur la valeur:

line one
another

vous enverriez

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
6
MalcolmOcean

Avait un problème similaire. Lors du téléchargement du fichier csv de Mac vers le stockage en nuage, de nouvelles lignes étaient en cours de suppression. Après le téléchargement, le fichier entier ressemblait à une seule ligne. J'ai essayé d'ajouter différents caractères EOL '\ n' '\ r' '\ r\n' sans succès. Utiliser '--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 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"
3
SutuwaShell

Ce n’est pas une réponse à votre question, mais j’aurais résolu ce problème en créant un fichier temporaire contenant le message et le saut de ligne, puis en donnant à Curl ce fichier sur lequel travailler:

curl -X PUT -d @message.txt http://localhost:8000/hello

Du manuel :

Si vous commencez les données avec la lettre @, le reste doit être un nom de fichier pour 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. L'enregistrement de données à partir d'un fichier nommé 'foobar' se ferait donc avec --data @foobar.

3
Pekka 웃

Un moyen très facile, il suffit de Maj-Entrée 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
2
John Williams