dea*_*mon 84 curl newline http
我已经尝试过以下方法来发送带有curl的换行符,但\n不会被curl解释.
curl -X PUT -d "my message\n" http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)
如何使用curl发送换行符?
Szo*_*ske 102
有时您想要提供要逐字发送的数据.
该--data-binary选项就是这样.
Ben*_*kin 38
你的shell正在传递\,n而不是换行而不是换行"my message\n".Bash支持另一种支持转义序列的字符串语法,例如\n和\t.要使用它,请使用以下命令启动字符串$'并结束字符串':
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)
Jam*_*mer 15
对于不想使用文件且不想诉诸shell转义魔法的人的解决方案是:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
Run Code Online (Sandbox Code Playgroud)
但这是后期数据有效负载中的字面换行符,而不是表单字段中的字面换行符.
Dav*_*err 13
有一个更简单的方法!
curl -X PUT -d $'my message\n' http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)
这将使用ANSI-C Quoting插入换行符.
没有管道,没有数据文件.另请参阅使用cURL发送换行符.
小智 13
有类似的问题。将 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"
Run Code Online (Sandbox Code Playgroud)
对比
curl -X PUT --data-binary @filename.csv https://cloudstorage -H "content-type: text/csv"
Run Code Online (Sandbox Code Playgroud)
(我最后在这里提出了一个稍微不同的问题,所以我只想发布我的答案,因为它可能有助于未来的探险家)
我的解决方案适用于发送表单样式数据的人,即查询字符串中的键/值对.使用编码换行符,%0A就像编码空间一样%20.您可以使用http://meyerweb.com/eric/tools/dencoder/转换其他符号.
因此,如果要将键设置message为值:
line one
another
Run Code Online (Sandbox Code Playgroud)
你会发送
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)
不是您问题的答案,但我会通过创建一个包含消息和换行符的临时文件来解决它,并让curl 该文件进行处理:
curl -X PUT -d @message.txt http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)
从手册中:
如果您以字母@开头数据,则其余部分应该是从中读取数据的文件名,或者 - 如果您希望curl从stdin读取数据。文件的内容必须已进行 URL 编码。也可以指定多个文件。因此,从名为“foobar”的文件发布数据可以使用 --data @foobar 来完成。