【问题标题】:How to post PUT request under the Windows using curl?如何使用 curl 在 Windows 下发布 PUT 请求?
【发布时间】:2010-11-23 15:14:24
【问题描述】:

我需要使用 PUT 请求在 windows 下通过 curl.exe 发布 XML 数据。

在我找到的 curl 帮助中:

-d/--data <data>   HTTP POST data (H)

我应该为&lt;data&gt; 提供什么?

【问题讨论】:

  • 没有使用 curl 这个选项,但是根据手册,它只是作为实体主体传递给服务器的字符串。如果您的数据以“@”开头,那么接下来是将被读取并发送到服务器的文件名。检查手册页:curl.haxx.se/docs/manpage.html
  • @Peter Štibraný 谢谢!忽略了这一点-尽管这是特定于 unix 命令行语法的东西,并且在 windows 中没有。

标签: windows http command-line curl


【解决方案1】:

curl 示例调用

# with inlining plain data curl -X PUT -d "payload" http://localhost # referrring file curl -X PUT -d @myXmlFile.xml http://localhost

如果您的 windows curl-port 不支持它,请选择 cygwin。它是一个类似于 linux 的 windows 环境,还提供“适当的”卷曲。

【讨论】:

  • 我尝试了 cygwin 并获得了 getaddrinfo 错误。在其他 PC 上运行 - 一切正常。
  • 所以这看起来像是您的机器或网络堆栈的问题?另一台PC是哪个操作系统,也是windows?
  • 我也在努力从 Windows 上的文件中发布数据有效负载,最后我发现我的数据文件是 UTF8(以 FF FE 字节开头)所以我不得不使用 --data-binary 而不仅仅是 @ 987654324@(--data 的别名)。
【解决方案2】:

在 Windows 中,如果双引号参数本身包含双引号字符,则双引号必须加倍。

例如,将 'This is "quoted" payload' 输入为 "This is ""quoted"" payload",这与 Unix 中的非常不同。

例子:

curl -X PUT -d "This is ""quoted"" payload" http://localhost

【讨论】:

    【解决方案3】:

    在 Windows 中,您需要将 @ 放在您要发送的文件的引号中:

    curl -XPUT --data-binary "@uploadme.txt"
    

    否则,当它尝试将文件内容用作 url 时,您会收到奇怪的错误:

    curl: (6) Couldn't resolve host 'upload'
    curl: (6) Couldn't resolve host 'me!'
    

    (uploadme.txt 包含“上传我!”)

    【讨论】:

    • 是@insde 引号让我猜了好几个小时。谢谢保罗
    • 感谢您指定 @ 需要放在引号内。在过去的几个小时里,我一直在敲击键盘试图弄清楚这一点。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2012-11-26
    • 2015-02-16
    • 1970-01-01
    • 2011-09-05
    • 2020-02-29
    相关资源
    最近更新 更多