Como enviar uma quebra de linha com o curl?

Eu tentei o seguinte para enviar uma quebra de linha com curl, mas \n não é interpretado por curl.

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

Como posso enviar uma quebra de linha com o curl?

Às vezes você deseja fornecer os dados a serem enviados textualmente.

A opção --data-binary faz isso.

Usando a syntax da string JavaScript, seu shell está passando "my message\\n" para enrolar em vez de "my message\n" . Se você estiver usando o bash, use $'my message\n' lugar. Eu não sei o que fazer se você estiver usando o tcsh.

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

Descobri isso pesquisando a manchete bash.

Se você estava usando o zsh, você não teria esse problema, pois o echo "1\n2\n3" imprime novas linhas.

A solução para alguém que não quer usar arquivos e não quer recorrer à magia de escape de shell é:

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

Mas isso é novas linhas literais na carga de dados de postagem e não em campos de formulário.

Há um jeito muito mais fácil!

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

Isso usará as cotas ANSI-C para inserir o caractere de nova linha.

Sem tubulação, sem arquivos de dados. Veja também Enviando Novas Linhas com cURL .

(Acabei aqui com uma pergunta um pouco diferente, então vou postar minha resposta porque isso pode ajudar futuros exploradores)

Minha solução se aplica a pessoas que estão enviando dados no estilo de formulário, ou seja, pares de chave / valor em uma string de consulta. Use a quebra de linha codificada, que é %0A , assim como um espaço codificado é %20 . Você pode usar http://meyerweb.com/eric/tools/dencoder/ para converter outros símbolos.

Então, se você quiser definir a message principal para o valor:

 line one another 

você enviaria

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

Não é uma resposta à sua pergunta, mas eu gostaria de contornar isso criando um arquivo temporário contendo a mensagem e a quebra de linha, e forneço esse arquivo para trabalhar:

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

Do manual :

Se você iniciar os dados com a letra @, o restante deverá ser um nome de arquivo para ler os dados ou, se desejar, curl para ler os dados de stdin. O conteúdo do arquivo já deve estar codificado por URL. Vários arquivos também podem ser especificados. Postar dados de um arquivo chamado ‘foobar’ seria feito com –data @foobar.

Uma maneira muito fácil, basta Shift-Enter no console para o intervalo. Muito legível digitando também.

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

Faça isso para remover a quebra de linha:

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

Eu estava usando Sendgrid com este código (copiado abaixo) originalmente encontrado aqui https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html

\n\n funcionou no Gmail, mas \n foi ignorado. Tentei dobrar a fuga e outras sugestões. Eu também tentei \r\n e isso não funcionou no Gmail também. Observação: não me preocupei em testar outros clientes de e-mail, talvez fosse um problema específico do 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 desisti de procurar uma solução e mudei o text/plain para text/html e usei apenas tags
.

Alguém sugeriu que o Sendgrid converte texto simples em HTML se você tiver um pixel de rastreamento ativado, o que faz sentido. Talvez as novas linhas tenham sido destruídas no processo de conversão de texto simples para HTML. Eu suponho que o cliente quer um pixel de rastreamento, então decidi mudar para HTML.

Teve problema semelhante. Ao fazer upload do arquivo csv do Mac para o armazenamento em nuvem, novas linhas estavam sendo removidas. Depois de baixá-lo, o arquivo inteiro parecia uma única linha. Eu tentei adicionar diferentes caracteres EOL ‘\ n’ ‘\ r’ ‘\ r \ n’ sem sucesso. Usando ‘–data-binary’ em vez de ‘-d’ resolveu o problema. Btw este problema ocorreu apenas a partir do Mac. ‘-d’ funcionou muito bem ao fazer a chamada da máquina do CentOS. Isso parece muito devido ao personagem de nova linha do Mac. Mas não se sinta mais como depurar.

Muito obrigado por sua ajuda.

curl -X PUT -d @ nome do arquivo.csv https: // cloudstorage -H “tipo de conteúdo: texto / csv”

VS

curl -X PUT –data-binary @ nome do arquivo.csv https: // cloudstorage -H “tipo de conteúdo: texto / csv”