日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

V2版本RPC風(fēng)格請(qǐng)求體&簽名機(jī)制

更新時(shí)間:

本文介紹了阿里云 OpenAPI 的 RPC 風(fēng)格接口,涵蓋請(qǐng)求的組成部分、如何構(gòu)造 OpenAPI 請(qǐng)求、獲取返回結(jié)果的方法以及簽名機(jī)制等。阿里云 RPC OpenAPI 向開(kāi)發(fā)者提供 HTTP 接口,方便自研阿里云 RPC 調(diào)用風(fēng)格的 OpenAPI SDK。

重要

不再推薦使用該訪問(wèn)方式,請(qǐng)移步參考V3版本請(qǐng)求體&簽名機(jī)制

RPC 風(fēng)格簡(jiǎn)介

RPC(Remote Procedure Call)是一種允許客戶端以類(lèi)似本地函數(shù)調(diào)用方式遠(yuǎn)程調(diào)用服務(wù)端方法的協(xié)議。阿里云的 RPC 接口主要支持以下兩種 HTTP 方法:

  • GET:用于從服務(wù)器獲取資源。

  • POST:用于向服務(wù)器提交數(shù)據(jù)或請(qǐng)求操作。

HTTP 請(qǐng)求結(jié)構(gòu)

一個(gè)完整的阿里云 RPC 請(qǐng)求由以下部分組成:

名稱

是否必選

描述

示例值

協(xié)議

支持通過(guò)HTTPHTTPS協(xié)議進(jìn)行請(qǐng)求通信。為了獲得更高的安全性,推薦您使用HTTPS協(xié)議發(fā)送請(qǐng)求。

https://

服務(wù)地址

即 Endpoint。您可以查閱不同云產(chǎn)品的服務(wù)接入地址文檔,在OpenAPI中的服務(wù)區(qū)域可查找。

ecs.aliyuncs.com

公共請(qǐng)求參數(shù)

阿里云 OpenAPI 的公共請(qǐng)求參數(shù),更多信息,請(qǐng)參見(jiàn)下文公共請(qǐng)求參數(shù)

Action

接口自定義請(qǐng)求參數(shù)

每個(gè) OpenAPI 自定義的請(qǐng)求參數(shù),建議您在阿里云 OpenAPI 開(kāi)發(fā)者門(mén)戶進(jìn)行試用。

RegionId

HTTPMethod

RPC 請(qǐng)求 Method 支持 POST 或者 GET。

GET

公共請(qǐng)求參數(shù)

每個(gè) RPC 請(qǐng)求都需包含以下關(guān)鍵參數(shù):

名稱

類(lèi)型

是否必選

描述

示例值

Action

String

API 的名稱。您可以訪問(wèn)阿里云 OpenAPI 開(kāi)發(fā)者門(mén)戶,搜索您想調(diào)用的 OpenAPI 。

CreateInstance

Version

String

API 版本。您可以訪問(wèn)阿里云 OpenAPI 開(kāi)發(fā)者門(mén)戶,查看您調(diào)用 OpenAPI 對(duì)應(yīng)的 API 版本。例如短信服務(wù)產(chǎn)品,您可以通過(guò)查看云產(chǎn)品主頁(yè)中看到API 版本為 2017-05-25。

2014-05-26

Format

String

指定返回?cái)?shù)據(jù)格式,可選 JSON 或 XML,默認(rèn)為 XML。

JSON

AccessKeyId

String

阿里云訪問(wèn)密鑰 ID。您可以在RAM 控制臺(tái)查看您的 AccessKeyId。如需創(chuàng)建 AccessKey,請(qǐng)參見(jiàn)創(chuàng)建AccessKey

yourAccessKeyId

SignatureNonce

String

簽名唯一隨機(jī)數(shù)。用于防止網(wǎng)絡(luò)重放攻擊,建議您每一次請(qǐng)求都使用不同的隨機(jī)數(shù),隨機(jī)數(shù)位數(shù)無(wú)限制。

15215528852396

Timestamp

String

當(dāng)前時(shí)間戳,有效期為31分鐘,即生成時(shí)間戳后需要在31分鐘內(nèi)發(fā)起請(qǐng)求。按照時(shí)間格式標(biāo)準(zhǔn)表示,并需要使用 UTC時(shí)間,格式為yyyy-MM-ddTHH:mm:ssZ

示例:2018-01-01T12:00:00Z表示北京時(shí)間2018年01月01日20點(diǎn)00分00秒。

2018-01-01T12:00:00Z

SignatureMethod

String

簽名方式。目前為固定值 HMAC-SHA1

HMAC-SHA1

SignatureVersion

String

簽名算法版本。目前為固定值 1.0

1.0

Signature

String

請(qǐng)求簽名,用戶請(qǐng)求的身份驗(yàn)證。更多信息,請(qǐng)參見(jiàn)后文簽名機(jī)制

Pc5WB8gokVn0xfeu%2FZV%2BiNM1dgI%3D

接口請(qǐng)求構(gòu)造

步驟一:構(gòu)造接口 URL

  • 接口 URL 由以下部分組成:[協(xié)議][服務(wù)地址]?[公共參數(shù)][業(yè)務(wù)請(qǐng)求參數(shù)]

  • POST 方法應(yīng)將業(yè)務(wù)參數(shù)放于請(qǐng)求體中,GET 方法的參數(shù)則在 URL 查詢字符串中。

  • 對(duì)請(qǐng)求參數(shù)進(jìn)行規(guī)范化編碼。例如: Timestamp 的參數(shù)值為 2016-02-23T12:46:24Z ,編碼后為 2016-02-23T12%3A46%3A24Z 。編碼方式請(qǐng)參見(jiàn)參數(shù)編碼方式

接口 URL 示例:

http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeDedicatedHosts&Format=XML&SignatureNonce=3ee8c1b8-xxxx-xxxx-xxxx-xxxxxxxxx&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%3A46%3A24Z&RegionId=cn-hangzhou&Status=Available

步驟二:發(fā)起接口調(diào)用

  • GET 方法可使用瀏覽器、curl 或者 wget 等工具發(fā)起請(qǐng)求。

  • POST方法需在請(qǐng)求體中傳入業(yè)務(wù)請(qǐng)求參數(shù),并設(shè)置請(qǐng)求頭的Content-Typeapplication/x-www-form-urlencoded

接口返回結(jié)果

返回結(jié)果主要有 XML 和 JSON 兩種格式,默認(rèn)為 XML ,可通過(guò)公共請(qǐng)求參數(shù)Format指定返回結(jié)果的格式。

說(shuō)明

為了便于您查看,API 文檔返回示例均進(jìn)行了換行和縮進(jìn)等處理,實(shí)際返回結(jié)果無(wú)換行和縮進(jìn)處理。

當(dāng)接口調(diào)用成功時(shí),將返回請(qǐng)求 ID,HTTP 狀態(tài)碼為 2xx(不顯示在響應(yīng)正文中)。成功響應(yīng)示例如下:

  • XML :

<?xml version="1.0" encoding="UTF-8"?> <!--結(jié)果的根結(jié)點(diǎn)-->
<ActionResponse> <!--返回請(qǐng)求標(biāo)簽-->
    <RequestId>4C467B38-3910-447D-87BC-AC049166F216</RequestId> <!--返回結(jié)果數(shù)據(jù)-->
</ActionResponse>
  • JSON :

{
    "RequestId": "4C467B38-3910-447D-87BC-AC049166F216" /* 返回結(jié)果數(shù)據(jù) */
}

接口調(diào)用出錯(cuò)時(shí),返回請(qǐng)求 ID、服務(wù)節(jié)點(diǎn)、錯(cuò)誤碼和錯(cuò)誤信息,HTTP 狀態(tài)碼為 4xx 或 5xx。錯(cuò)誤響應(yīng)示例如下:

  • XML :

<?xml version="1.0" encoding="UTF-8"?><!--結(jié)果的根結(jié)點(diǎn)-->
<Error>
    <RequestId>540CFF28-407A-40B5-B6A5-74Bxxxxxxxxx</RequestId> <!--請(qǐng)求 ID-->
    <HostId>ecs.aliyuncs.com</HostId> <!--服務(wù)節(jié)點(diǎn)-->
    <Code>MissingParameter.CommandId</Code> <!--錯(cuò)誤碼-->
    <Message>The input parameter “CommandId” that is mandatory for processing this request is not supplied.</Message> <!--錯(cuò)誤信息-->
</Error>
  • JSON :

{
    "RequestId": "540CFF28-407A-40B5-B6A5-74Bxxxxxxxxx", /* 請(qǐng)求 ID */
    "HostId": "ecs.aliyuncs.com", /* 服務(wù)節(jié)點(diǎn) */
    "Code": "MissingParameter.CommandId", /* 錯(cuò)誤碼 */
    "Message": "The input parameter “CommandId” that is mandatory for processing this request is not supplied." /* 錯(cuò)誤信息 */
}
說(shuō)明

接口調(diào)用出錯(cuò)后,您可以根據(jù)返回的 RequestId,在阿里云OpenAPI開(kāi)發(fā)者門(mén)戶-診斷中排查。此外,您還可以查閱公共錯(cuò)誤碼以及API 錯(cuò)誤中心。當(dāng)您無(wú)法排查錯(cuò)誤時(shí),可以提交工單,并在工單中注明服務(wù)節(jié)點(diǎn) HostId 和 RequestId。

簽名機(jī)制

為了確保 API 的安全性,每個(gè)請(qǐng)求都需通過(guò)簽名(Signature)進(jìn)行身份驗(yàn)證。以下是簽名計(jì)算的步驟:

步驟一:構(gòu)造規(guī)范化請(qǐng)求字符串

1、參數(shù)排序:按照參數(shù)首字母的字典順序?qū)?shù)排序,排序參數(shù)包括公共請(qǐng)求參數(shù)和接口自定義參數(shù)(即 OpenAPI 文檔中的請(qǐng)求參數(shù)),不包括公共請(qǐng)求參數(shù)中的Signature參數(shù)。 公共請(qǐng)求參數(shù)詳情,請(qǐng)參見(jiàn)上文公共請(qǐng)求參數(shù)。偽代碼如下:

// 例:參數(shù)名集合 {b, a, C} 排序后為 {C, a, b}
sortParams = sorted(params.keys())

2、編碼參數(shù):使用 UTF-8 字符集按照RFC3986規(guī)則編碼請(qǐng)求參數(shù)和參數(shù)取值,編碼具體規(guī)則請(qǐng)參看參數(shù)編碼方式。為方便表述,我們將此步驟的編碼方法,命名為 encodeURIComponent。偽代碼如下:

// 例:請(qǐng)求參數(shù)為測(cè)試,參數(shù)取值為中文 編碼后分別是%E6%B5%8B%E8%AF%95和%E4%B8%AD%E6%96%87
encodeURIComponent(sortParams.keys, sortParams.values)

3、連接參數(shù):使用等號(hào)(=)連接第二步得到的編碼后請(qǐng)求參數(shù)和參數(shù)值。然后用&連接所有參數(shù)。注意參數(shù)排序與第1步一致。偽代碼如下:

// 例:編碼后請(qǐng)求參數(shù)為test,參數(shù)取值為testvalue,則拼接為test=testvalue
encodeURIComponentParam.key=encodeURIComponentParam.value

得到了規(guī)范化請(qǐng)求字符串CanonicalizedQueryString

步驟二:構(gòu)造簽名字符串

1、構(gòu)造待簽名字符串 stringToSign。該字符串構(gòu)造規(guī)則的偽代碼如下:

String stringToSign =
  HTTPMethod + "&" + // HTTPMethod:發(fā)送請(qǐng)求的 HTTP 方法,例如 GET。
  encodeURIComponent("/") + "&" + // encodeURIComponent 為步驟一第2步的編碼方法
  encodeURIComponent(CanonicalizedQueryString) // CanonicalizedQueryString 為步驟一獲取的規(guī)范化請(qǐng)求字符串。

2、計(jì)算簽名。按照RFC2104的定義,通過(guò)您傳入的 AccessKeyId 對(duì)應(yīng)的密鑰 AccessSecret,使用 HMAC-SHA1的簽名算法,計(jì)算待簽名字符串StringToSign的簽名。其中 Base64() 為編碼計(jì)算函數(shù),HMAC_SHA1() 為 HMAC_SHA1 簽名函數(shù),返回值為 HMAC_SHA1 加密后原始字節(jié),而非16進(jìn)制字符串,UTF_8_Encoding_Of() 是 UTF-8 字符編碼函數(shù),偽代碼如下:

String signature = Base64(HMAC_SHA1(AccessSecret + "&", UTF_8_Encoding_Of(stringToSign)))

使用 HMAC-SHA1 簽名算法,計(jì)算得到的公共參數(shù) Signature 的簽名值 signature

簽名示例

本示例以調(diào)用 ECS DescribeDedicatedHosts查詢一臺(tái)或多臺(tái)專(zhuān)有宿主機(jī)的詳細(xì)信息為例。假設(shè) AccessKeyID 為 testid, AccessKeySecret 為 testsecret,SignatureNonce 為 edb2b34af0af9a6d14deaf7c1a5315eb, Timestamp 為 2023-03-13T08:34:30Z,簽名流程如下:

  1. 構(gòu)造規(guī)范化請(qǐng)求字符串。

    http://ecs.aliyuncs.com/?AccessKeyId=testid&Action=DescribeDedicatedHosts&Format=JSON&RegionId=cn-beijing&SignatureMethod=HMAC-SHA1&SignatureNonce=edb2b34af0af9a6d14deaf7c1a5315eb&SignatureVersion=1.0&Tag.1.Key=testkey&Tag.1.Value=testvalue&Timestamp=2023-03-13T08%3A34%3A30Z&Version=2014-05-26
  2. 構(gòu)造待簽名字符串stringToSign

    GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeDedicatedHosts%26Format%3DJSON%26RegionId%3Dcn-beijing%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dedb2b34af0af9a6d14deaf7c1a5315eb%26SignatureVersion%3D1.0%26Tag.1.Key%3Dtestkey%26Tag.1.Value%3Dtestvalue%26Timestamp%3D2023-03-13T08%253A34%253A30Z%26Version%3D2014-05-26
  3. 計(jì)算簽名值。例如 AccessKeySecret=testsecret,用于計(jì)算的 Key 為testsecret&(注意:加上后綴&)。計(jì)算得到的簽名值為fRmq1o6saIIjVlawOy+o6jDU9JQ=。偽代碼如下:

    String Signature = Base64(HMAC_SHA1(AccessSecret + "&",UTF_8_Encoding_Of(stringToSign)))
  4. 得到完整的URL。添加RFC3986規(guī)則編碼后的Signature=fRmq1o6saIIjVlawOy%2Bo6jDU9JQ%3D第1步的 URL 中。

    https://ecs.cn-beijing.aliyuncs.com/?AccessKeyId=testid&Action=DescribeDedicatedHosts&Format=JSON&RegionId=cn-beijing&SignatureMethod=HMAC-SHA1&SignatureNonce=edb2b34af0af9a6d14deaf7c1a5315eb&SignatureVersion=1.0&Tag.1.Key=testkey&Tag.1.Value=testvalue&Timestamp=2023-03-13T08%3A34%3A30Z&Version=2014-05-26&Signature=fRmq1o6saIIjVlawOy%2Bo6jDU9JQ%3D
重要

Version 字段值和域名是對(duì)應(yīng)關(guān)系(服務(wù)域名和 Version 值請(qǐng)參看對(duì)應(yīng)云產(chǎn)品 OpenAPI 云產(chǎn)品主頁(yè)),錯(cuò)誤的域名或 Version 值可能導(dǎo)致 InvalidVersion 錯(cuò)誤。

通過(guò)第4步得到的 URL,您可以使用瀏覽器、curl 或者 wget 等工具發(fā)起HTTP請(qǐng)求調(diào)用DescribeDedicatedHosts,查詢一臺(tái)或多臺(tái)專(zhuān)有宿主機(jī)的詳細(xì)信息。

附錄

參數(shù)編碼方式

在阿里云 OpenAPI 調(diào)用中,請(qǐng)求參數(shù)和參數(shù)值需使用 UTF-8 字符集按照RFC3986規(guī)則進(jìn)行編碼。具體編碼規(guī)則如下:

  • 字符 A~Z、a~z、0~9 以及字符-_.~不編碼。

  • 對(duì)其他 ASCII 碼字符進(jìn)行編碼。編碼格式為%加上16進(jìn)制的 ASCII 碼。例如半角雙引號(hào)(")將被編碼為 %22

  • 非 ASCII 碼通過(guò) UTF-8 編碼。

  • 空格編碼成%20,不使用加號(hào)(+)表示空格。

相關(guān)文檔

區(qū)分ROA風(fēng)格和RPC風(fēng)格