我正在尝试使用bash和cURL中的Yandex.Cloud function API。
为了实现这一点,我编写了一个如下所示的JSON:
#Make header
IAM_TOKEN="myToken"
HEADER="Authorization: Bearer ${IAM_TOKEN}"
#Make data JSON
DATA=""
for ELEMENT in \
"'"\
'{"runtime":"dotnetcore31", "entrypoint": "Function.Handler",'\
'"resources":{"memory":"134217728"}, "content": "PLACEHOLDERFORCONTENT",'\
'"ServiceAccountId":"accId", '\
'"function_id": "funcId"}'\
"'"; do
DATA+="${ELEMENT}"
done
然后,我需要按照API的建议,在JSON中提供部署包的内容:
在我的例子中,它是一个带有函数代码的zip压缩文件。因此,我以字节的形式读取文件,并将结果注入到JSON字符串中。然后发送请求。
#Read file content
FILE_LOC="/Users/Constantine/Downloads/archiveName.zip"
FILE_BYTES=`(xxd -b ${FILE_LOC}) | base64`
#Inject content into JSON
DATA=${DATA/PLACEHOLDERFORCONTENT/$FILE_BYTES}
#Send the request
eval "$(echo curl -H \"$HEADER\" --data-binary $DATA https://serverless-functions.api.cloud.yandex.net/functions/v1/versions)"
在这里,我得到了**-bash:/usr/bin/ curl :参数列表太长**错误。我怀疑这是因为cURL将二进制内容解释为要读取的文件名,但我不知道如何解决这个问题。
如何将文件中的二进制内容提供到JSON字符串中?
1条答案
按热度按时间xqnpmsa81#
您正在使用bash下的cURL调用发送请求。并且shell有一个最大行长度,您已经大大超过了这个长度。最简单的解决方法是将JSON数据保存到一个文件中,并为cURL提供一个指向该文件的指针,这样行长度就可以保持不变:
除此之外,你的代码看起来很复杂,你可以简化一下,避免循环,一次创建文件,避免
eval
: