我已尝试使用以下内容发送包含curl的换行符,但\n
不会被curl解释。
curl -X PUT -d "my message\n" http://localhost:8000/hello
如何使用curl发送换行符?
答案 0 :(得分:95)
有时您希望提供逐字发送的数据。
--data-binary
选项可以做到这一点。
答案 1 :(得分:33)
您的shell正在传递\
后跟n
而不是新行来卷曲而不是"my message\n"
。 Bash支持另一种支持\n
和\t
等转义序列的字符串语法。要使用它,请使用$'
启动字符串,并使用'
结束字符串:
curl -X PUT -d $'my message\n' http://localhost:8000/hello
中的Bash Reference Manual
答案 2 :(得分:15)
对于不想使用文件并且不想诉诸shell逃避魔法的人的解决方案是:
curl -X POST --data-binary @- http://url.com <<EOF
line one
line two
EOF
但这是后期数据有效负载中的文字换行符,而不是表单字段。
答案 3 :(得分:12)
有一种更简单的方式!
var A = [ { id: 'U125H069G', code: 'C13LKL4V6' },
{ id: 'U13MPMLA3', code: 'C13LKL4V6' },
{ id: 'U125H069G', code: 'C125H083C' },
{ id: 'U13MPMLA3', code: 'C125H083C' },
{ id: 'U125H069G', code: 'C123Q00D9' },
{ id: 'U13MPMLA3', code: 'C123Q00D9' },
{ id: 'U125H069G', code: 'C13LM1VUP' } ];
B = [];
A.forEach(function(va){
if (!B.some(function(vb, i){
if (vb.id === va.id){
B[i].codes.push(va.code);
return true;
}
})){
B.push({id:va.id, codes:[va.code]})
}
});
//Display
document.body.appendChild(document.createTextNode(JSON.stringify(B)));
这将使用ANSI-C Quoting插入换行符。
没有管道,没有数据文件。另请参阅Sending Newlines with cURL。
答案 4 :(得分:6)
(最后我的问题略有不同,所以我只想发布我的答案,因为它可能有助于未来的探险家)
我的解决方案适用于发送表单样式数据的人,即查询字符串中的键/值对。使用编码换行符%0A
,就像编码空间%20
一样。您可以使用http://meyerweb.com/eric/tools/dencoder/转换其他符号。
因此,如果要将键message
设置为值:
line one
another
你会发送
curl --data "message=line%20one%0Aanother" http://localhost:8000/hello
答案 5 :(得分:3)
不是你的问题的答案,但我会通过创建一个包含消息和换行符的临时文件来解决它,并给curl该文件起作用:
curl -X PUT -d @message.txt http://localhost:8000/hello
来自manual:
如果使用字母@开始数据,则其余部分应该是用于读取数据的文件名,或者 - 如果您希望curl从stdin读取数据。该文件的内容必须已经过URL编码。也可以指定多个文件。因此,可以使用--data @foobar。
来发布名为'foobar'的文件中的数据
答案 6 :(得分:2)
一种非常简单的方法,只需在控制台中按Shift-Enter即可。非常易读,也可以输入。
curl -d "line1
line2" http-echo.com
Server gets this: line1\nline2
执行此操作以删除换行符:
curl -d "line1 \
line2" http-echo.com
Server gets this: line1 line2
答案 7 :(得分:0)
有类似的问题。在将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"
答案 8 :(得分:-1)
我正在使用Sendgrid,此代码(下面已复制)最初位于https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html
\n\n
在Gmail中有效,但\n
被忽略了。我试图将逃脱和其他建议加倍。我也尝试了\r\n
,但在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。