我正在尝试使用来自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。
答案 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上测试]