Use curl implement urlencode()
This commit is contained in:
parent
2d81a10e4c
commit
639d002dcf
|
@ -1,8 +1,12 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
for c in openssl curl python3; do
|
_exit() {
|
||||||
|
echo "$2"
|
||||||
|
exit "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
for c in openssl curl; do
|
||||||
if ! command -v ${c} > /dev/null; then
|
if ! command -v ${c} > /dev/null; then
|
||||||
echo "${c}: command not found"
|
_exit 127 "Aliyun OpenAPI SDK: ${c} command not found"
|
||||||
exit 127
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -11,7 +15,6 @@ _AliAccessKeySecret=$(printenv AliAccessKeySecret)
|
||||||
_ali_format_rpc=JSON
|
_ali_format_rpc=JSON
|
||||||
_ali_signature_method=HMAC-SHA1
|
_ali_signature_method=HMAC-SHA1
|
||||||
_ali_signature_version=1.0
|
_ali_signature_version=1.0
|
||||||
_urlencode_pycode="from sys import stdin;from urllib.parse import quote;print(quote(stdin.read(), '-_.~'))"
|
|
||||||
|
|
||||||
# aliapi_rpc <host> <http_method> <api_version> <api_action> <api_custom_key[]> <api_custom_value[]>
|
# aliapi_rpc <host> <http_method> <api_version> <api_action> <api_custom_key[]> <api_custom_value[]>
|
||||||
aliapi_rpc() {
|
aliapi_rpc() {
|
||||||
|
@ -78,7 +81,7 @@ _ali_signature_rpc() {
|
||||||
|
|
||||||
_ali_timestamp_rpc() {
|
_ali_timestamp_rpc() {
|
||||||
# ISO8601 UTC
|
# ISO8601 UTC
|
||||||
date -u +%FT%TZ
|
date -u "+%FT%TZ"
|
||||||
}
|
}
|
||||||
|
|
||||||
_ali_signature_nonce() {
|
_ali_signature_nonce() {
|
||||||
|
@ -86,5 +89,7 @@ _ali_signature_nonce() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_urlencode() {
|
_urlencode() {
|
||||||
echo -n "$1" | python3 -c "$_urlencode_pycode"
|
local result
|
||||||
|
result=$(curl -G -s -o /dev/null -w "%{url_effective}" --data-urlencode "=$1" file:///dev/null)
|
||||||
|
echo "${result#*\?}"
|
||||||
}
|
}
|
21
README.md
21
README.md
|
@ -4,23 +4,20 @@
|
||||||
|
|
||||||
这是一个非官方的阿里云 OpenAPI Shell SDK,为了方便 Shell 脚本调用阿里云 OpenAPI,SDK 主要实现了自动计算请求签名。
|
这是一个非官方的阿里云 OpenAPI Shell SDK,为了方便 Shell 脚本调用阿里云 OpenAPI,SDK 主要实现了自动计算请求签名。
|
||||||
|
|
||||||
虽然阿里云官方有 [AliyunCLI](https://github.com/aliyun/aliyun-cli),可以在 Shell 环境下使用阿里云 OpenAPI。不过某些 API (比如 SSL 证书) 它并不支持,或者说还没来得及支持,所以我就想写一个可能是最好用的阿里云 Shell SDK。
|
虽然阿里云官方有 [AliyunCLI](https://github.com/aliyun/aliyun-cli),可以在 Shell 环境下使用阿里云 OpenAPI,不过某些 API (比如 SSL 证书) 它并不支持,或者说还没来得及支持,所以我就想写一个可能是最好用的阿里云 Shell SDK。
|
||||||
|
|
||||||
理论上支持所有阿里云 RPC OpenAPI,RESTful OpenAPI 暂不支持,将来可能会支持。
|
理论上支持所有阿里云 RPC OpenAPI,RESTful OpenAPI 暂不支持,将来可能会支持。
|
||||||
|
|
||||||
## 依赖
|
## 依赖
|
||||||
|
|
||||||
* curl
|
* curl
|
||||||
* OpenSSL
|
* openssl
|
||||||
* Python3
|
|
||||||
|
|
||||||
Python3 用于 `urlencode`,因为纯 Shell 实现的 `urlencode` 可用性较低,索性就直接使用 Python,不兼容 Python2。
|
|
||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
1. 导出`AliAccessKeyId` 和 `AliAccessKeySecret` 环境变量
|
1. 导出 `AliAccessKeyId` 和 `AliAccessKeySecret` 环境变量
|
||||||
2. 导入 `AliyunOpenAPI.sh`
|
2. 导入 `AliyunOpenApiSDK.sh`
|
||||||
3. 调用 `aliapi_rpc` 函数
|
3. 调用 `aliapi_rpiSDK` 函数
|
||||||
|
|
||||||
函数签名:`aliapi_rpc(host, http_method, api_version, api_action, api_custom_key[], api_custom_value[]): JsonResult | ErrorCode`
|
函数签名:`aliapi_rpc(host, http_method, api_version, api_action, api_custom_key[], api_custom_value[]): JsonResult | ErrorCode`
|
||||||
|
|
||||||
|
@ -28,11 +25,11 @@ Python3 用于 `urlencode`,因为纯 Shell 实现的 `urlencode` 可用性较
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# 导出环境变量
|
# 导出 AliAccessKeyId 和 AliAccessKeySecret
|
||||||
export AliAccessKeyId="<AliAccessKeyId>" # 此处替换为你的阿里云 AliAccessKeyId
|
export AliAccessKeyId="<AliAccessKeyId>"
|
||||||
export AliAccessKeySecret="<AliAccessKeySecret>" # 此处替换为你的阿里云 AliAccessKeySecret
|
export AliAccessKeySecret="<AliAccessKeySecret>"
|
||||||
# 导入 SDK
|
# 导入 SDK
|
||||||
. AliyunOpenAPI.sh
|
. AliyunOpenApiSDK.sh
|
||||||
|
|
||||||
# 自定义请求参数的键值数组顺序要一一对应,数组成员不能包含空格。
|
# 自定义请求参数的键值数组顺序要一一对应,数组成员不能包含空格。
|
||||||
# 自定义值支持自定义函数,如果你需要包含空格或者读取文件等操作,可以声明一个自定义函数,像下面这样。
|
# 自定义值支持自定义函数,如果你需要包含空格或者读取文件等操作,可以声明一个自定义函数,像下面这样。
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
export AliAccessKeyId="<AliAccessKeyId>"
|
export AliAccessKeyId="<AliAccessKeyId>"
|
||||||
export AliAccessKeySecret="<AliAccessKeySecret>"
|
export AliAccessKeySecret="<AliAccessKeySecret>"
|
||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
. ../AliyunOpenAPI.sh
|
. ../AliyunOpenApiSDK.sh
|
||||||
|
|
||||||
# acme.sh 执行 renewHook 时导出的环境变量列表
|
# acme.sh 执行 renewHook 时导出的环境变量列表
|
||||||
ACME_ENV_LIST=(
|
ACME_ENV_LIST=(
|
||||||
|
|
Loading…
Reference in New Issue