如何用curl发送换行符?

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选项就是这样.

  • 因为它花了我一秒钟:如果你上传一个文件你可能想要使用子shell为这个`curl -H"Content-Type:text/plain"--data-binary"$(<myfile)" HTTP://本地主机:8888` (8认同)
  • +1,正确答案.`curl --data-binary @/path/to/file.txt http:// example.com/target` (8认同)
  • 我无法使用--data-binary工作,但能够使用%0A字符(请参阅@malcolmocean)回答.当我使用--data-binary"ip = 33.44.55.*\n5.6.7.8"时,它不会将其视为换行符,但是--data""ip = 33.44.55.*%0A5.6.7.8 "确实发送换行符 (3认同)
  • 这是最好的方法.在另一个答案中建议使用`-d @ message.txt`的替代方法可以改变你的换行符.另一方面,`--data-binary`不会(如果您需要为多部分/表单数据保留CRLF换行符,这很重要,请参阅:http://stackoverflow.com/questions/10765243/how-can- I-重写此结果卷曲多部分形式的数据请求,而无需-使用-F) (2认同)

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)

请参阅Bash参考手册中的ANSI-C引用

  • @BenAtkin抱歉,弗洛伊德滑倒.但是,我的阅读仍然是正确的.`\n`与JavaScript无关.事实上,这里没有任何与JavaScript有关的东西. (2认同)

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)


Mal*_*ean 6

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

我的解决方案适用于发送表单样式数据的人,即查询字符串中的键/值对.使用编码换行符,%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)

  • 对于换行符/回车符的小注释(可能是拼写错误),它应该是 %0A 而不是 %A0 (3认同)

Pek*_*ica 2

不是您问题的答案,但我会通过创建一个包含消息和换行符的临时文件来解决它,并让curl 该文件进行处理:

curl -X PUT -d @message.txt http://localhost:8000/hello
Run Code Online (Sandbox Code Playgroud)

手册中:

如果您以字母@开头数据,则其余部分应该是从中读取数据的文件名,或者 - 如果您希望curl从stdin读取数据。文件的内容必须已进行 URL 编码。也可以指定多个文件。因此,从名为“foobar”的文件发布数据可以使用 --data @foobar 来完成。

  • -1; 使用带有“-d @/path/to/temp/file.txt”的临时文件并不能解决换行问题。`--data-binary` 确实如此,见上文。 (8认同)