【问题标题】:pass an array of headers to curl into a bash script将一组标头传递给 curl 到 bash 脚本
【发布时间】:2016-08-23 17:40:41
【问题描述】:

我正在编写一个脚本,它是一个测试套件,可以使用 curl 检查所有无效标头大小写。

我创建了一堆函数,这些函数允许我使用默认测试值构造标题 tupe (field_name: field_value)。

build_foo_header() {
  local FOO_KN=${1:-'X-App-Name'}
  local FOO_KV=${2:-'MyApp'}
  echo $FOO_KN: $FOO_KV
}

我想在缺少标头或标头值无效的函数中创建一些数组来测试我的应用行为。

所以我创建了一个示例函数:

build_headers_invalid_X_App_Name_Value() {
  HEADERS=()

  # this array should contain all other required headers
  HEADERS[0]=$(build_foo_header X-App-Name BadValue)
  # HEADERS[1]= header that is required with default value
  # and son on for all the remaning required headers

  echo "${HEADERS[@]/#/-H}" 
}

但是我无法获取 curl 如何将该数组传递给 curl ?

$(curl $(build_headers_invalid_X_App_Name_Value) myURl)

似乎向 HEADERS 数组中的第一个标头发送请求。

我有大约 10 个必需的标头,这就是我想这样编写脚本的原因。

【问题讨论】:

    标签: arrays bash curl


    【解决方案1】:

    问题在于通过回显"${HEADERS[@]/#/-H}",您将失去HEADERS 元素中出现的空白和用于分隔输出中两个元素的空白之间的任何区别。

    如果你想使用一个函数,你只需要设置一个全局数组,然后直接使用它。不需要或有用的命令替换。

    build_foo_header() {
      local FOO_KN=${1:-'X-App-Name'}
      local FOO_KV=${2:-'MyApp'}
      echo "$FOO_KN: $FOO_KV"
    }
    
    build_headers_invalid_X_App_Name_Value() {
      HEADERS=()
    
      # this array should contain all other required headers
      HEADERS[0]=$(build_foo_header X-App-Name BadValue)
      # HEADERS[1]= header that is required with default value
      # and son on for all the remaning required headers    
    }
    
    build_headers_invalid_X_App_Name_Value
    curl "${HEADERS[@]/#/-H}" myUrl
    

    【讨论】:

    • 非常感谢您的详细解答。我将有很多 build_headers_XXX 函数来处理丢失或拼写错误的标题的每个用例,所以我希望数组是函数的本地数组,然后想办法将它传递给 curl 命令(会有一堆 curl 调用我的脚本)。对不起,它比 OP 多一点,但如果你不介意给我提示:)
    • 如果您可以将结果作为字符串传递(通过函数的输出),则不需要发明数组。 bash 没有什么比字符串更复杂的了,您可以将其作为一等值传递。
    • 你可以在一个子shell中运行函数和curl,只要你不需要做任何其他的全局:(build_headers; curl "${HEADERS[@]/#/-H}" myUrl)。这样,HEADERS 对于运行命令的子 shell 来说是全局的,但在该子 shell 退出后消失。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多