如何用curl发送换行符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用curl发送换行符?相关的知识,希望对你有一定的参考价值。

我已经尝试过以下方法来发送带有curl的换行符,但 不会被curl解释。

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

如何使用curl发送换行符?

答案

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

--data-binary选项就是这样。

另一答案

你的贝壳正在通过,然后是n,而不是一条新线来卷曲而不是"my message "。 Bash支持另一种支持 等转义序列的字符串语法。要使用它,请使用$'启动字符串并使用'结束字符串:

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

请参阅ANSI-C Quoting中的Bash Reference Manual

另一答案

对于不想使用文件但不想诉诸shell转义魔法的人的解决方案是:

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

但这是后期数据有效负载中的字面换行符,而不是表单字段中的字面换行符。

另一答案

有一个更简单的方法!

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

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

没有管道,没有数据文件。另见Sending Newlines with cURL

另一答案

(我最后在这里提出了一个稍微不同的问题,所以我只想发布我的答案,因为它可能有助于未来的探险家)

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

因此,如果要将密钥message设置为值:

line one
another

你会发送

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

不是你的问题的答案,但我会通过创建一个包含消息和换行符的临时文件解决它,并给curl该文件工作:

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

来自manual

如果用字母@开始数据,其余的应该是一个文件名来读取数据,或者 - 如果你想让curl从stdin读取数据。该文件的内容必须已经过URL编码。也可以指定多个文件。因此,可以使用--data @foobar从名为'foobar'的文件中发布数据。

另一答案

一个非常简单的方法,只需在控制台中按Shift键进入休息时间。非常易读也可以输入。

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

Server gets this: line1
line2

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

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

Server gets this: line1 line2
另一答案

有类似的问题。在将csv文件从Mac上传到云存储时,新线路正在被删除。下载后,整个文件看起来像一行。我尝试添加不同的EOL字符' n'' r'' r n'但没有成功。使用'--data-binary'而不是'-d'解决了这个问题。顺便说一句,这个问题只发生在Mac上。 '-d'在从CentOS机器拨打电话时工作得很好。这看起来很像Mac的换行符。但是不要再调试了。

非常感谢你的帮助。

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"
另一答案

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

在Gmail工作,但 被忽略了。我试图将逃脱和其他建议加倍。我也尝试过 ,但在Gmail中也没有用。注意:我没有费心去测试其他电子邮件客户端,也许这是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!"}]}'

最终我放弃了寻找解决方案并将text/plain切换到text/html并且只使用了<br />标签。

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

以上是关于如何用curl发送换行符?的主要内容,如果未能解决你的问题,请参考以下文章

如何用换行符回显文本区域的输入?

如何用JS代码实现段落换行?

如何用 HttpClient 对象调用或类似方法替换 curl 调用?

如何用Java向kafka发送json数据

如何用Java向kafka发送json数据

如何用C/C++模拟post提交数据,获得http相应。