【问题标题】:Passing Bash Variable to CURL将 Bash 变量传递给 CURL
【发布时间】:2017-03-15 15:21:52
【问题描述】:

当我给出这样的值时,它会起作用:

curl --silent \ --insecure \ -X POST \ -d '{"Name" : "Vikram"}' \ -H "Content-Type: application/json" \ $restUrl

但是当我这样给它时:

post="'{\"Name\" : \"Vikram\"}'"    
echo $post   // Prints '{"Name" : "Vikram"}'
echo ${post} // Prints '{"Name" : "Vikram"}'

但以下不起作用并引发 400 错误:

curl --silent \ --insecure \ -X POST \ -d ${post} \ -H "Content-Type: application/json" \ $restUrl

【问题讨论】:

    标签: bash shell curl


    【解决方案1】:

    似乎有多个问题。

    1) 为了解决您的标题提出的问题,当您使用 $post 作为参数时,其值中的空格会导致它被 Bash 视为多个参数。尝试在它周围加上引号,以便将其视为一个参数。

    2) 我猜您在 $post 中添加了单引号,试图让 Bash 将其视为单个参数。尝试删除单引号。

    3) 至少对我来说,curl 命令中的所有反斜杠都会导致它失败。也许你把它分成多行,而复制/粘贴没有翻译。我在下面的示例中删除了它们。

    综合起来:

    post="{\"Name\" : \"Vikram\"}"
    curl --silent --insecure -X POST -d "${post}" -H "Content-Type: application/json" $restUrl
    

    【讨论】:

    • 但是我仍然遇到同样的错误,我尝试了你的建议,但我无法解决问题。
    • @Vikram 我已经更新了我的答案。我认为您可能还有要删除的单引号。如果不知道 $restUrl 的服务器端是什么,很难说。
    • 我可以像这样使用 curl 命令吗: curl --silent \ --insecure \ -X POST \ -d {"Name" : "Vikram"}, '{"Country" : "India "} \ -H "Content-Type: application/json" \ $restUrl 您好我需要传递多个参数,其余方法是:@RequestMapping(method = RequestMethod.POST, value = "/save") public void save(@RequestParam(name = "country") String country, @RequestBody Name name)
    【解决方案2】:

    不要将单引号放在$post 变量中,将它们放在值周围以引用它。那么你就不需要转义值内的双引号了。

    post='{"Name" : "Vikram"}'
    

    然后在curl 命令行中使用变量时引用该变量,以防止它被拆分为多个参数。

    您也不应该在curl 命令行中使用所有这些反斜杠。它们正在转义它们之后的空间,因此它们将被视为文字参数而不是分隔符。在命令中使用反斜杠的通常情况是,如果您将其拆分为多行,那么您需要转义换行符,以便它不会结束命令。

    curl --silent --insecure -X POST -d "${post}" -H "Content-Type: application/json" "$restUrl"
    

    【讨论】:

    • contentType="Content-Type: application/json" 如何将它包含在像 -H ${contentType} 这样的标头中不起作用。任何解决方法
    • 你看我的回答了吗?引用变量是怎么说的?
    • @Vikram 99% 的时间你想在使用变量时引用它们。
    • 它应该可以工作。更新问题以准确显示您在做什么。
    • 或者发布一个新问题,因为您已经将此问题标记为已解决。
    【解决方案3】:

    你想引用${post}:"${post}",这样你的shell就不会拆分你的变量的内容。

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2013-10-27
      相关资源
      最近更新 更多