【问题标题】:How do I POST LF with curl command line tool?如何使用 curl 命令行工具发布 LF?
【发布时间】:2008-12-23 07:33:29
【问题描述】:

我正在尝试使用 Linux shell 脚本中的 CURL POST 到 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]

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

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

【问题讨论】:

    标签: linux curl


    【解决方案1】:

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

    来自手册:

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

    如果您想发布不带 --data-ascii 选项的 strip-newlines 功能的二进制文件,这是给您的。如果多次使用此选项,第一个后面的将追加数据。

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

    【讨论】:

    • 这也是我刚刚得出的结论 :)
    • 啊哈!我一直在这个页面上工作curl.haxx.se/docs/manual.html,我刚刚意识到这只是用法——它没有提到--data-binary。我实际上想避免使用 -F 因为我想避免使用文件系统。
    【解决方案2】:

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

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

    【讨论】:

    • CRLF 或 LF - 没有任何区别 - 但在您和 Athena 让我知道 --data-binary 之前,我也无法发送。谢谢。
    【解决方案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 没有成功。

    【讨论】:

      【解决方案4】:
      curl "url" --data-binary @myfile 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-18
        • 2013-01-01
        • 2017-03-31
        • 2017-10-03
        • 2017-03-26
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        相关资源
        最近更新 更多