我正在关注Sonarqube web api上的documentation获取/设置属性。我想在项目pi_core上设置属性名称为“appName”和值为“UCFE”的属性。最终我想通过PowerShell完全自动化这个,但是现在我只是尝试使用curl验证概念,就像文档一样。我的命令是:
curl -u myID:myPassword -X POST http://myServer.ad1.prod:9000/api/properties?id=appName&value=UCFE&resource=pi_core
我已经通过执行需要管理员授权的其他通用网络API调用验证了我的ID和密码。当我尝试运行以上内容时,我得到:
{"err_code":200,"err_msg":"property created"}'value' is not recognized as an internal or external command, operable program or batch file.
'resource' is not recognized as an internal or external command, operable program or batch file.
为什么这个命令在我看来与除了值之外的文档完全相同时会出现上述错误?
答案 0 :(得分:1)
首先,用引号关闭URI;
curl -u myID:myPassword -X POST 'http://myServer.ad1.prod:9000/api/properties?id=appName&value=UCFE&resource=pi_core'
如果您没有将3个命令封装并从shell运行
&
开始时会向后台发送3个命令
在博客上显示时,API文档通常是不完整的,测试有限,被抛在一起,甚至无意中陷入逃避过程。
在命令行上使用curl时,请记住shell
首先解释命令。
您的初始命令:
curl -u myID:myPassword -X POST http://myServer.ad1.prod:9000/api/properties?id=appName&value=UCFE&resource=pi_core,对于shell来说是这样的:
arg1: curl arg2: -u arg3: myID:myPassword arg4: -X arg5: POST arg6: http://myServer.ad1.prod:9000/api/properties?id=appName arg7: value=UCFE arg8: resource=pi_core
因此,上面的 arg7 和 arg8 作为参数发送到cURL
。 cURL不知道" value = UCFE"意味着错误:
'值'不被视为内部或外部命令
当您在一个参数(例如,cURL
的网址)中发送一个文本块的引号时,它看起来像这样:
命令:
curl -u myID:myPassword -X POST 'http://myServer.ad1.prod:9000/api/properties?id=appName&value=UCFE&resource=pi_core'
<强>被解释的:强>
Arg0: curl Arg1: -u Arg2: myID:myPassword Arg3: -X Arg4: POST Arg5: http://myServer.ad1.prod:9000/api/properties?id=appName&value=UCFE&resource=pi_core
旁注 - 为了完成;
引号是单引号还是双引号通常无关紧要,但它们 不同。
单引号的情况:某些API中有$
个符号。例如, MYOB 有许多参数,如下所示;在这种情况下,如果有很多,可能更容易使用单引号:
'?$filter=DateOccurred%20ge%20datetime%272016-07-25%2'。在这种情况下,如果有很多,可能更容易使用单引号。
双引号案例:很多变数:
"?id=$id&refresh=true¶mlist=$params&authredirect=$authlevel"