304
機器人
調用說明__附錄_API文檔_雲解析-阿裏雲
以DescribeDomainRecords接口為例(以下示例代碼采用Java語言,關於更完整的示例程序及其他開發語言的示例代碼,請參見阿裏雲開發者論壇https://bbs.aliyun.com/ ).
對應的Action是DescribeDomainRecords,需要一個必要的操作參數是DomainName。在添加了所有公共請求參數(除Signature)後,請求的URL是(為了便於閱讀,這裏是進行URL編碼前的URL):
https://alidns.aliyuncs.com/?Format=XML&AccessKeyId=testid&Action=DescribeDomainRecords&SignatureMethod=HMAC-SHA1&DomainName=example.com&SignatureNonce=f59ed6a9-83fc-473b-9cc6-99c95df3856e&SignatureVersion=1.0&Version=2015-01-09&Timestamp=2016-03-24T16:41:54Z
按照簽名計算規則,先構造出規範化請求字符串(Canonicalized Query String),如下:
AccessKeyId=testid&Action=DescribeDomainRecords&DomainName=example.com&Format=XML&SignatureMethod=HMAC-SHA1&SignatureNonce=f59ed6a9-83fc-473b-9cc6-99c95df3856e&SignatureVersion=1.0&Timestamp=2016-03-24T16%3A41%3A54Z&Version=2015-01-09
再構造出用於簽名的字符串StringToSign值為:
GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeDomainRecords%26DomainName%3Dexample.com%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Df59ed6a9-83fc-473b-9cc6-99c95df3856e%26SignatureVersion%3D1.0%26Timestamp%3D2016-03-24T16%253A41%253A54Z%26Version%3D2015-01-09
以下Java示例代碼演示了如何添加公共請求參數、如何構造用請求參數構造規範化請求字符串,以及如何構造StringToSign字符串。示例假定所有請求參數放在一個Map<String, String>對象裏,使用的Access Key ID是“testid”。
final String HTTP_METHOD = "GET";
Map<String, String> parameters = new HashMap<String, String>();
// 加入請求參數
parameters.put("Action", "DescribeDomainRecords");
parameters.put("DomainName", "example.com");
parameters.put("Version", "2015-01-09");
parameters.put("AccessKeyId", "testid");
parameters.put("TimeStamp", formatIso8601Date(new Date()));
parameters.put("SignatureMethod", "HMAC-SHA1");
parameters.put("SignatureVersion", "1.0");
parameters.put("SignatureNonce", UUID.randomUUID().toString());
parameters.put("Format", "XML");
// 對參數進行排序,注意嚴格區分大小寫
String[] sortedKeys = parameters.keySet().toArray(new String[]{});
Arrays.sort(sortedKeys);
final String SEPARATOR = "&";
// 生成stringToSign字符串
StringBuilder stringToSign = new StringBuilder();
stringToSign.append(HTTP_METHOD).append(SEPARATOR);
stringToSign.append(percentEncode("/")).append(SEPARATOR);
StringBuilder canonicalizedQueryString = new StringBuilder();
for(String key : sortedKeys) {
// 這裏注意對key和value進行編碼
canonicalizedQueryString.append("&")
.append(percentEncode(key)).append("=")
.append(percentEncode(parameters.get(key)));
}
// 這裏注意對canonicalizedQueryString進行編碼
stringToSign.append(percentEncode(canonicalizedQueryString.toString().substring(1)));
其中需要注意的是,TimeStamp參數要求符合ISO8601規範,並注意使用UTC時間,否則會遇到錯誤。下麵的示例代碼演示了如何生成符合規範的TimeStamp字符串:
private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
private static String formatIso8601Date(Date date) {
SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);
df.setTimeZone(new SimpleTimeZone(0, "GMT"));
return df.format(date);
}
生成規範化請求字符串(示例中的canonicalizedQueryString變量),以及stringToSign時,都需要進行必要的編碼。編碼的規則在簽名機製一節中有詳細描述。下麵的示例代碼演示了如何用java.net.URLEncoder類完成編碼:
private static final String ENCODING = "UTF-8";
private static String percentEncode(String value)
throws UnsupportedEncodingException{
return value != null ?
URLEncoder.encode(value, ENCODING).replace("+", "%20")
.replace("*", "%2A").replace("%7E", "~")
: null;
}
假定使用的Access Key Id是“testid”, Access Key Secret是“testsecret”,用於計算HMAC的Key就是“testsecret&”,最終計算得到的簽名值為:
uRpHwaSEt3J+6KQD//svCh/x+pI=
計算簽名的示例代碼(Java):
// 以下是一段計算簽名的示例代碼
final String ALGORITHM = "HmacSHA1";
final String ENCODING = "UTF-8";
key = "testsecret&";
Mac mac = Mac.getInstance(ALGORITHM);
mac.init(new SecretKeySpec(
key.getBytes(ENCODING), ALGORITHM));
byte[] signData = mac.doFinal(
stringToSign.getBytes(ENCODING));
String signature =
new String(Base64.encodeBase64(signData));
增加簽名參數後,請按照RFC3986規則進行URL編碼後得到的:
https://alidns.aliyuncs.com/?Format=XML&Action=DescribeDomainRecords&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&DomainName=example.com&SignatureNonce=f59ed6a9-83fc-473b-9cc6-99c95df3856e&Version=2015-01-09&SignatureVersion=1.0&Signature=uRpHwaSEt3J%2B6KQD%2F%2FsvCh%2Fx%2BpI%3D&Timestamp=2016-03-24T16%3A41%3A54Z
接下來,通過HTTP請求的方式向上麵的URL地址發送HTTP請求,並得到DNS服務端的響應結果(示例):
<DescribeDomainRecordsResponse>
<PageNumber>1</PageNumber>
<DomainRecords>
<Record>
<DomainName>example.com</DomainName>
<Line>default</Line>
<Priority>1</Priority>
<RR>2222</RR>
<RecordId>51542601</RecordId>
<TTL>600</TTL>
<Type>MX</Type>
<Value>hichina.com</Value>
</Record>
<Record>
<DomainName>example.com</DomainName>
<Line>default</Line>
<RR>234234</RR>
<RecordId>51542600</RecordId>
<TTL>600</TTL>
<Type>SRV</Type>
<Value>3 0 2176 example-server.2.google.com</Value>
</Record>
<Record>
<DomainName>example.com</DomainName>
<Line>default</Line>
<RR>2222</RR>
<RecordId>51542068</RecordId>
<TTL>600</TTL>
<Type>A</Type>
<Value>3.4.5.6</Value>
</Record>
</DomainRecords>
<PageSize>3</PageSize>
<TotalCount>3</TotalCount>
<RequestId>F3440766-E1C5-4110-8285-5F53F6750560</RequestId>
</DescribeDomainRecordsResponse>
通過解析這個XML結果即可以得到域名下所有解析記錄的列表。如果在提交請求時,指定Format參數為JSON,那麼返回結果的格式為JSON格式。
最後更新:2016-11-23 16:04:06
上一篇:
入門示例__附錄_API文檔_雲解析-阿裏雲
下一篇:
續費__常見問題_雲解析-阿裏雲
搭建 WordPress 網站___建站教程_雲服務器 ECS-阿裏雲
grep示例__示例程序_MapReduce_大數據計算服務-阿裏雲
功能說明-共享帶寬包__NAT網關產品簡介_用戶指南_專有網絡 VPC-阿裏雲
GetGroup__組管理接口_RAM API文檔_訪問控製-阿裏雲
運行SQL__快速開始_大數據計算服務-阿裏雲
終止應用實例__應用API列表_API參考_容器服務-阿裏雲
金融風控__阿裏雲ET介紹-阿裏雲
消息隊列(MQ)服務條款___購買指南_消息隊列 MQ-阿裏雲
Mysql數據源配置__數據源配置_數據同步手冊_用戶操作指南_大數據開發套件-阿裏雲
自定義清洗的使用__創建監控任務_用戶指南_業務實時監控服務 ARMS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲