【问题标题】:cURL not sending file datacURL 不发送文件数据
【发布时间】:2018-03-09 13:47:38
【问题描述】:

我尝试使用 cURL 调用将文件数据发送到远程服务器。

curl -X POST -u username:password -d 'data=@/path/to/file.ext&version=2&action=Parse' http://fqdn.to.server.i.control/Parser.cgi
curl -X POST -u username:password -d 'data=@localFile.ext&version=2&action=Parse' http://fqdn.to.server.i.control/Parser.cgi
cat file.ext | curl -X POST -u username:password -d 'data=@-&version=2&action=Parse' http://fqdn.to.server.i.control/Parser.cgi

文件内容已经被 URI 编码。在服务器端使用 Perl 和 CGI​​。

我的问题是,当服务器尝试访问该“数据”行时,我拥有的值只有“file.ext” - 路径被剥离并且文件的内容未被使用($cgi->param(" data") 分别只是 "file.ext"、"localFile.ext" 或 "-")。

关于我做错了什么的任何迹象?

【问题讨论】:

  • 你读过 curl man page 吗? -d--data 之后的部分需要以@ 开头才能有特殊行为。
  • @MattJacob 废话。我的本地手册页必须是过时的。我对手册页进行了谷歌搜索,并看到了我的本地文档中不存在的这个条目:“name@filename 这将使 curl 从给定文件中加载数据(包括任何换行符),对该数据进行 URL 编码并传递它在 POST 中打开。名称部分附加一个等号,导致 name=urlencoded-file-content。请注意,该名称应该已经是 URL 编码的。”看起来我的问题是我正在使用的=。我现在觉得自己很笨。
  • @MattJacob 没关系。那是--data-urlencode。我读得太远了。当我再次在我的控制台时,我会尝试更多的语法 - 许多这个功能说它是在我当前的版本 7.13 之后添加的,所以我什至可能无法做到这一点。
  • 您仍然可以使用 shell 命令,例如以下bash 命令:-d "data=$( cat /path/to/file.ext )&version=2&action=Parse"。很确定这也是有效的sh
  • 没有人应该使用像 7.13 这样的旧 curl 版本...

标签: linux perl curl cgi


【解决方案1】:

@MattJacob 是正确的;我的语法错误。 data=@... 应该是 @... 并且 data= 部分应该已经在文件中。男孩,我很厚。

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多