Comment envoyer line break avec curl?

j'ai essayé ce qui suit pour envoyer une rupture de ligne avec curl, mais n n'est pas interprété par curl.

curl -X PUT -d "my messagen" http://localhost:8000/hello

Comment puis-je envoyer un saut de ligne avec curl?

70
demandé sur deamon 2010-10-06 16:31:44

9 réponses

Parfois, vous voulez fournir les données à envoyer verbatim.

l'option --data-binary fait cela.

82
répondu Szocske 2016-05-17 16:29:12

votre shell passe \ suivi de n plutôt qu'une nouvelle ligne à curl plutôt que "my message\n" . Bash a le support pour une autre syntaxe de chaîne qui supporte les séquences d'évasion comme \n et \t . Pour l'utiliser, Démarrez la chaîne avec $' et terminez la chaîne avec ' :

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

voir ANSI-C citant dans le Bash Reference Manual

27
répondu Ben Atkin 2018-09-29 00:51:02

la solution pour quelqu'un qui ne veut pas utiliser de fichiers, et qui ne veut pas recourir à la magie d'échappement de shell est:

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

mais ce sont des nouvelles lignes littérales dans la charge utile de données de poste, et non dans les champs de forme.

12
répondu Jammer 2014-06-06 11:44:37

il y a un moyen plus facile!

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

utiliser ANSI-C citant pour insérer le caractère newline.

Pas de tuyauterie, pas de fichiers de données. Voir aussi envoi de nouvelles lignes avec boucle .

9
répondu Dave Kerr 2016-05-04 04:00:31

(j'ai fini ici avec une question légèrement différente, donc je vais juste poster ma réponse parce que cela pourrait aider les futurs explorateurs)

ma solution s'applique aux personnes qui envoient des données de type form, c'est-à-dire des combinaisons clé/valeur dans une chaîne de requête. Utilisez la coupure de ligne codée, qui est %0A , tout comme un espace codé est %20 . Vous pouvez utiliser http://meyerweb.com/eric/tools/dencoder / pour convertir d'autres symbole.

donc si vous voulez mettre la clé message à la valeur:

line one
another

envoyer

curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
5
répondu MalcolmOcean 2016-02-17 19:33:52

ce n'est pas une réponse à votre question, mais je travaillerais autour de lui en créant un fichier temporaire contenant le message et la rupture de ligne, et donner curl ce fichier pour travailler sur:

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 à partir, ou - si vous voulez curl de lire les données de stdin. Le contenu du fichier doit être déjà URL-encoded. Plusieurs fichiers peuvent également être spécifiées. L'affichage de données à partir d'un fichier nommé 'foobar' serait donc fait avec --data @foobar.

3
répondu Pekka 웃 2010-10-06 12:37:28

un moyen très facile, il suffit de changer-entrer dans la console pour la pause. Très lisible tapant trop.

curl -d "line1
line2" http-echo.com

Server gets this: line1\nline2

faites ceci pour supprimer la rupture de ligne:

curl -d "line1 \
line2" http-echo.com

Server gets this: line1 line2
2
répondu John Williams 2014-11-18 17:47:33

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 \n a été ignoré. J'ai essayé de doubler l'évasion et d'autres suggestions. J'ai aussi essayé \r\n et cela n'a pas fonctionné dans Gmail non plus. Note: je n'ai pas pris la peine de tester d'autres clients de messagerie, peut-être que C'était 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 changé le text/plain en text/html et j'ai juste utilisé les étiquettes <br /> .

Quelqu'un a suggéré que Sendgrid convertisse plaintext en HTML si vous avez un pixel de suivi activé, ce qui est logique. Peut-être que les nouvelles lignes ont été détruites dans le processus de conversion de plaintext-to-html. Je suppose que le client veut un pixel de suivi, alors j'ai décidé de passer au HTML.

0
répondu PJ Brunet 2017-10-21 03:40:19

avait un problème similaire. Pendant le téléchargement du fichier csv de Mac vers le stockage en nuage, de nouvelles lignes ont été retirées. Après le téléchargement, le fichier entier ressemblait à une seule ligne. J'ai essayé d'ajouter différents caractères de fin de vie '\n' '\r' '\r\n' sans succès. L'utilisation de '-- data-binaire 'au lieu de'- d ' a résolu le problème. Btw ce problème ne s'est produit que depuis Mac. '- d ' A très bien fonctionné tout en faisant l'appel de CentOS machine. Cela ressemble beaucoup à cause du caractère newline de Mac. Mais ne vous sentez pas comme le débogage, plus.

Merci beaucoup pour votre aide.

curl-X MIS -d @nom de fichier.csv https://cloudstorage - h "content-type: text / csv"

VS

curl-X --METTRE des données binaires @nom de fichier.csv https://cloudstorage - h "content-type: text / csv"

0
répondu SutuwaShell 2017-12-20 21:03:47