如何用curl发送换行符?

我已经尝试了以下发送curl的换行符,但是\n不被curl解释。

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

我怎样才能用curl发送一个换行符?

有时你想提供的数据要逐字发送。

--data-binary选项可以做到这一点。

使用JavaScriptstring语法,你的shell传递"my message\\n"来curl,而不是"my message\n" 。 如果您使用的是bash,请改用$'my message\n' 。 如果你使用tcsh,我不知道该怎么做。

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

我通过searchbash的manpage发现了这一点。

如果你正在使用zsh,你不会有这个问题,因为echo "1\n2\n3"打印换行符。

对于不想使用文件的人来说,解决scheme并不想使用shell逃脱的魔法:

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

但是这是后数据有效载荷中的字面新行,而不是表单字段。

有一个更简单的方法!

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

这将使用ANSI-C引用来插入换行符。

没有pipe道,没有数据文件。 另请参见使用cURL发送换行符 。

(我在这里结束了一个稍微不同的问题,所以我只是要发表我的答案,因为这可能有助于未来的探险家)

我的解决scheme适用于发送表单样式数据的人员,即查询string中的键/值对。 使用编码的换行符,即%0A ,就像编码空间是%20 。 您可以使用http://meyerweb.com/eric/tools/dencoder/转换其他符号。;

所以如果你想把关键message设置为这个值:

 line one another 

你会发送

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

不是你的问题的答案,但我会通过创build一个包含消息和换行符的临时文件来解决这个问题,然后让curl来处理这个文件:

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

从手册 :

如果你用字母@开始数据,其余的应该是一个文件名来读取数据,或者 – 如果你想curl从标准input读取数据。 该文件的内容必须已经被URL编码。 也可以指定多个文件。 从一个名为'foobar'的文件中发布数据可以用–data @foobar来完成。

一个非常简单的方法,只需Shift-Enter在控制台中rest。 非常可读的打字。

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

这样做是为了消除换行符:

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

我正在使用Sendgrid这个代码(复制下面)最初在这里findhttps://sendgrid.com/docs/API_Reference/Web_API_v3/index.html

\n\n在Gmail中工作,但\n被忽略。 我试图加倍逃避和其他build议。 我也试过\r\n ,而且在Gmail中也不行。 注意:我没有打算testing其他电子邮件客户端,也许这是一个特定于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!"}]}' 

最终,我放弃寻找解决scheme,并将text/plain text/html切换到text/html并使用<br />标签。

有人build议,如果您启用了跟踪像素,则Sendgrid将明文转换为HTML,这是有道理的。 也许换行符在纯文本到html的转换过程中被破坏了。 我假设客户想要一个跟踪像素,所以决定切换到HTML。

如果你只是想在结果之后换行,你可以打印一个echo:

 curl -X PUT -d "my message" http://localhost:8000/hello && echo