Comment envoyer line break avec curl?
9 réponses
Parfois, vous voulez fournir les données à envoyer verbatim.
l'option --data-binary
fait cela.
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
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.
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 .
(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
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.
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
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.
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"