如何在curl请求中传递动态参数

时间:2017-08-05 10:06:58

标签: shell curl post

我将动态值传递给测试方法并执行curl请求。 $ PARAMETERS存在问题。

当我执行以下方法时,我收到如下错误

错误: -

curl: option -F: requires parameter
curl: try 'curl --help' or 'curl --manual' for more information

功能: -

testing() {

local URL=$1
local HTTP_TYPE=$2
local PARAMETERS=$3

# store the whole response with the status at the and
HTTP_RESPONSE=$(curl -w "HTTPSTATUS:%{http_code}" -X $HTTP_TYPE $URL $PARAMETERS)

echo $HTTP_RESPONSE
}

URL='https://google.com'
HTTP_TYPE='POST'
PARAMETERS="-F 'name=test' -F 'query=testing'"


result=$(testing $URL $HTTP_TYPE $PARAMETERS)

仅供参考,上面是一个示例方法,我正在使用shell脚本。请告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

由于你在第三个参数中传递了多个命令参数,所以shell会在你的函数中使用不带引号的变量时进行拆分。

您最好使用shell数组来存储PARAMETERS参数。

将您的功能视为:

testing() {
   local url="$1"
   local httpType="$2"

   shift 2 # shift 2 times to discard first 2 arguments
   local params="$@" # store rest of them in a var

   response=$(curl -s -w "HTTPSTATUS:%{http_code}" -X "$httpType" "$url" "$params")
   echo "$response"
}

并将其命名为:

url='https://google.com'
httpType='POST'

params=(-F 'name=test' -F 'query=testing')
result=$(testing "$url" "$httpType" "${params[@]}")

此外,您应该避免在shell脚本中使用全封闭变量名称,以避免与env变量发生冲突。

如果您未使用bash,还可以使用:

params="-F 'name=test' -F 'query=testing'"
result=$(testing "$url" "$httpType" "$params")

Code Demo