【发布时间】: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 版本...