【发布时间】:2015-07-27 15:20:34
【问题描述】:
我正在尝试通过命令行将参数传递给 cURL,这样:
curl -s -X POST -H "Content-Type: text/xml" -H "Cache-Control: no-cache" -d '<Data Token="someToken" Name='"$appName"' ID='"$someVar"' ParseAppID='"$someVar"' ParseRESTKey='"$someVar"' AndroidPackage='"$someVar"' Version="1"></Data>' 'https://prefix.something.com/somePath?InputType=Xml'
(此行实际上是从 Postman 应用程序中提取的)。
我在谷歌上搜索了这个问题,发现很多对我不起作用的解决方案(链接是过去的问题...):
- 我尝试了isolating 变量通过结束单引号,这样:
'before...'"${someVar}"'...after...'。无法完成请求。 - 我尝试传递变量using a file (
-d @fileName)。发帖失败。 - 我尝试在
<Data>标记周围加上双引号的 replacing 单引号 - 但该命令显然不能接受这种替换。
我得到的错误是<Error></Error> 或The server encountered an error and could not complete your request.
是否有可能存在其他解决方案? 有没有人遇到过这样的问题?
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
去掉单引号是使变量得到扩展的唯一方法。也就是说,变量的内容在该位置是否合法是另一个问题。您可能会以这种方式构造一个非法请求,但这不是 shell 变量问题。当您尝试这样做时,您的具体失败是什么?
-
@EtanReisner 感谢您的评论。当我做类似
'<Data Name='"$appName"'></Data>'的事情时,我得到的错误是空的:<Error></Error>。我尝试在此命令之前回显变量,并且它们都已正确打印。 -
提供一种方法来保证输出始终是有效的 XML,顺便说一下,这将是一个不同的、更长的答案。 @chepner 涵盖了便宜/简单的方法;确保文档有效性(实体转义等)需要不同的工具。