linux-curl 从文件中读取文件属性

linux-curl 从文件中读取文件属性

所以我有这个curl命令。但我想将 API 密钥存储在名为 api.txt 的文件中,并将其加载到curl 命令中值所在的位置。

api.txt 文件包含

'X-Api:<API-KEY>'

这个命令有效。

curl -H 'X-Api:<API-KEY>' -T file.zip "https://URL"

尝试过:

curl -H “Content-Type: text/plain” -d “api.txt” -T file.zip "https://URL"

出现错误:

  "errors" : [ {
    "status" : 401,
    "message" : "Unauthorized"
  } ]
}%      

问题:

  1. 如何加载实际的 api 密钥或 api.txt 中的预期行以将其解析为curl 命令?
  2. 这是这样做的方法吗?或者更好的方法?

答案1

curl -H "$(cat api.txt)" -T file.zip "https://URL"

或者,从输入文件中删除所有百分号和单引号:

curl -H "$(tr -d "'%" api.txt)" -T file.zip "https://URL"

或者,仅删除开头''%结尾的:

curl -H "$(sed -E "s/^'|'%$//g" api.txt)" -T file.zip "https://URL"

PS:我最初认为这需要分两行完成,以避免 api.txt 中的尾随换行符:

API_KEY=$(cat api.txt)
curl -H "$API_KEY" -T file.zip "https://URL"

但 bash 似乎改进了对输入文件末尾换行符的处理命令替换- 即,如果没有进一步的输入,它将删除它们。我使用的是 bash 5.1.16,如果您使用不同的 shell 或不同版本的 bash,您可能必须使用两行版本。

答案2

curl支持@从正确格式的文件中读取标头;这将比分叉更有效cat,并且可能允许消除 shell,转而使用更简单、更高效、更不易出现安全缺陷的exec(3)run 调用curl,而不需要system(3)shell:

curl -H '@api.txt' -T file.zip "https://..."

简单的 Bourne shell不需要@引用,但它是为了防止某些 shell 对该角色执行某些操作。如果正在使用奇特的 shell(例如zsh),请检查引用规则以查看哪些字符具有特殊含义,或主动引用所有内容。

相关内容