7

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

我需要传递以下数据(注意 [ ] 和 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]

我可以做些什么来避免这种情况,或者我需要替代工具吗?

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

4

4 回答 4

11

尝试使用--data-binary而不是-d(ata-ascii).

从手册:

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

如果你想发布一个没有 --data-ascii 选项的 strip-newlines 特性的二进制文件,这是给你的。如果多次使用此选项,则第一个后面的选项将附加数据。

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

于 2008-12-23T07:44:15.030 回答
3

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

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

于 2008-12-23T07:43:36.187 回答
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 没有成功。

于 2008-12-23T09:28:23.900 回答
1
curl "url" --data-binary @myfile 

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

于 2010-11-24T21:34:59.853 回答