我需要帮助在shell脚本中打印一个带有Rest的实体。我试过几种方法,但都没有成功。
这里是我的代码,运行它,它将返回我表中的所有实体。
#!/bin/bash
# List the tables in an Azure storage container.
storage_account="Secret"
table_name="teste"
access_key="Secret"
table_store_url="table.core.windows.net"
authorization="SharedKey"
request_method="GET"
request_date=$(TZ=GMT LC_ALL=en_US.utf8 date "+%a, %d %h %Y %H:%M:%S %Z")
#request_date="Mon, 18 Apr 2016 05:16:09 GMT"
storage_service_version="2018-03-28"
# HTTP Request headers
x_ms_date_h="x-ms-date:$request_date"
x_ms_version_h="x-ms-version:$storage_service_version"
# Build the signature string
canonicalized_resource="/${storage_account}/${table_name}"
string_to_sign="${request_method}\n\n\n$request_date\n${canonicalized_resource}"
# Decode the Base64 encoded access key, convert to Hex.
decoded_hex_key="$(echo -n $access_key | base64 -d -w0 | xxd -p -c256)"
# Create the HMAC signature for the Authorization header
signature=$(printf "$string_to_sign" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:$decoded_hex_key" -binary | base64 -w0)
authorization_header="Authorization: $authorization $storage_account:$signature"
curl -s \
-H "$authorization_header" \
-H "$x_ms_date_h" \
-H "$x_ms_version_h" \
-H "Content-Length: 0" \
-H "accept: application/json;odata=nometadata" \
"https://${storage_account}.${table_store_url}/${table_name}"
如果我在末尾插入(partitionkey='name',RowKey='gabriel')“
得到如下两行:
string_to_sign = "$ {request_method} \ n \ n \ n $ request_date \ n $ {canonicalized_resource} (PartitionKey = 'name', RowKey = Gabriel)"
"https://${storage_account}.${table_store_url}/${table_name}(PartitionKey='nome',RowKey='Gabriel')"
它将只返回PartitionKey为“name”和Rowkey为“Gabriel”的实体。
但正如我之前所说的,我必须只使用分区键。如果我仅将两行的结尾更改为(PartitionKey='name'),则返回以下错误:
The number of keys specified in the URI does not match number of key properties for the resource
我尝试使用$filter选项,将两行的结尾更改为()$filter=(partitionkey%20ge%20'name')
,但在通过printf时发生错误。
通过将()$filter=(PartitionKey%%20GE%%20'name')
放入2%,它通过了,但在请求时发生身份验证错误。
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature
有人能帮帮我吗?
我需要使用PartitionKey,因为在这些测试中,我使用的是我创建的表,并且我有RowKey的值用于测试,但是在需要实现的地方,我没有RowKey的访问权限,我将传递PartitionKey的值,它是一个电话号码,以获得RowKey的结果,它是一个ID。
使用了以下文档:
查询实体时不需要更改string_to_sign
,请参阅授权头。
查询字符串应包括问号和comp参数(例如?comp=metadata)。查询字符串中不应包含其他参数。
如果要使用PartitionKey获取整个实体,请将url更改为($need编码改为%24)
https://${storage_account}.${table_store_url}/${table_name}?%24filter=PartitionKey%20eq%20'YourPartitionKey'
而且-h“content-length:0”
也没用,删除它就行了。