如何使用curl命令行工具POST LF?

时间:2008-12-23 07:33:30

标签: linux curl

我正在尝试使用来自Linux shell脚本的CURL POST到SMS提供程序的HTTP网关(Sybase 365)。

我需要传递以下数据(注意[]和LF字符)

[MSISDN]
List=+12345678
[MESSAGE]
Text=Hello
[END]

如果我使用-F参数提交文件,CURL将删除LF,例如

curl -F @myfile "http://www.sybase.com/..."

在服务器上导致此问题(被拒绝)

[MSISDN]List=+12345678[MESSAGE]Text=Hello[END]

我能做些什么来避免这种情况,还是需要替代工具?

我正在使用包含我的数据的文件进行测试,但我想在实践中避免这种情况,直接从脚本中进行POST。

4 个答案:

答案 0 :(得分:11)

尝试使用--data-binary代替-d(ata-ascii)

从手册:

  

- data-binary(HTTP)以与--data-ascii类似的方式发布数据,尽管使用此选项时,已发布数据的整个上下文保持原样。

     

如果您想发布没有--data-ascii选项的strip-newlines功能的二进制文件,那么这适合您。如果多次使用此选项,则第一个选项将附加数据。

ETA:哎呀,我应该更仔细地阅读这个问题。你使用的是-F,而不是-d。但是--data-binary可能仍然值得一试。

答案 1 :(得分:3)

可能是一个愚蠢的想法,但我不认为它实际上需要CRLF而不仅仅是LF?

或者,您是否尝试过使用--data-binary选项而不是-F?

答案 2 :(得分:3)

我使用-d

进行此操作
request=`printf "[MSISDN]\nList=$number\n[MESSAGE]\nText=$message\n[END]\n"`
response=`curl -s -u $username:$password -d "$request" http://www.sybase.com/...`

奇怪的是,如果我使用-d @myfile(其中myfile包含LF分隔文本),它就不起作用。

我也试过--data-binary没有成功。

答案 3 :(得分:1)

curl "url" --data-binary @myfile 

在数据中发布新行[在卷曲7.12.1上测试]