¿Cómo enviar salto de línea con curl?

He intentado lo siguiente para enviar un salto de línea con curl, pero \n no se interpreta por curl.

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

¿Cómo puedo enviar un salto de línea con curl?

En ocasiones, desea proporcionar los datos que se envían textualmente.

La opción --data-binary hace eso.

Al usar la syntax de la cadena de JavaScript, su shell pasa "my message\\n" para curl en lugar de "my message\n" . Si está utilizando bash, use $'my message\n' lugar. No sé qué hacer si estás usando tcsh.

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

Descubrí esto buscando en la página de manual de bash.

Si estuviera usando zsh, no habría tenido este problema, ya que echo "1\n2\n3" imprime líneas nuevas.

La solución para alguien que no quiere usar archivos, y no quiere recurrir a la magia de escape de shell es:

 curl -X POST --data-binary @- http://url.com < 

Pero esto es nuevas líneas literales en la carga de datos de publicación, y no en campos de formulario.

¡Hay una manera mucho más fácil!

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

Esto usará Citas ANSI-C para insertar el carácter de nueva línea.

Sin tuberías, sin archivos de datos. Ver también Enviar nuevas líneas con cURL .

(Terminé aquí con una pregunta ligeramente diferente, así que solo voy a publicar mi respuesta porque podría ayudar a futuros exploradores)

Mi solución se aplica a las personas que envían datos de estilo de formulario, es decir, pares clave / valor en una cadena de consulta. Utilice el salto de línea codificado, que es %0A , al igual que la forma en que un espacio codificado es %20 . Puede usar http://meyerweb.com/eric/tools/dencoder/ para convertir otros símbolos.

Entonces, si desea establecer el message clave en el valor:

 line one another 

enviarías

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

No es una respuesta a su pregunta, pero me gustaría solucionarlo creando un archivo temporal que contenga el mensaje y el salto de línea, y doblar ese archivo para que funcione:

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

Del manual :

Si comienza los datos con la letra @, el rest debe ser un nombre de archivo para leer los datos, o – si desea que curl lea los datos de stdin. El contenido del archivo ya debe tener encoding URL. Múltiples archivos también pueden ser especificados. La publicación de datos de un archivo llamado ‘foobar’ se haría con –data @foobar.

Una manera muy fácil, solo Shift-Enter en la consola para el descanso. Muy legible escribiendo también.

 curl -d "line1 line2" http-echo.com Server gets this: line1\nline2 

Haga esto para eliminar el salto de línea:

 curl -d "line1 \ line2" http-echo.com Server gets this: line1 line2 

Estaba usando Sendgrid con este código (copiado a continuación) encontrado originalmente aquí https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html

\n\n funcionó en Gmail, pero \n fue ignorado. Traté de duplicar el escape y otras sugerencias. También probé \r\n y eso tampoco funcionó en Gmail. Nota: No me molesté en probar otros clientes de correo electrónico, tal vez era un problema específico de 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!"}]}' 

Eventualmente dejé de buscar una solución y cambié el text/plain a text/html y acabo de usar
tags.

Alguien sugirió que Sendgrid convierta textos comunes a HTML si tiene habilitado un píxel de seguimiento, lo que tiene sentido. Quizás las líneas nuevas se destruyeron en el proceso de conversión de texto plano a HTML. Supongo que el cliente quiere un píxel de seguimiento, por lo que decidió cambiar a HTML.

Tenía un problema similar. Al cargar el archivo csv de Mac al almacenamiento en la nube, se eliminaron nuevas líneas. Después de descargarlo, el archivo completo parecía una sola línea. Traté de agregar diferentes caracteres EOL ‘\ n’ ‘\ r’ ‘\ r \ n’ sin éxito. Usar ‘–data-binary’ en lugar de ‘-d’ resolvió el problema. Por cierto, este problema solo ocurrió en Mac. ‘-d’ funcionó bien mientras realizaba la llamada desde la máquina CentOS. Esto se parece mucho al personaje de nueva línea de Mac. Pero no tiene ganas de depurar más.

Muchas gracias por tu ayuda.

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”