阿里云提供了各种api接口,通过接口,可以实现非交互式的操作云资源 。 有个解析域名的小需求,这里记录一下操作的过程。签名的字符串中的 :
(分号需要)改变成 %253A
,而不是 %3A
。
file : test.php
date_default_timezone_set('UTC');
define("ACCESSKEYID", '*****************');
define("ACCESSKEYSECRET", '************************');
define("MY_DOMAIN", 'liuhaolin.com');
function uget($url) {
$ch = curl_init();
curl_setopt_array( $ch , array(
CURLOPT_URL => $url,
# 返回结果,而不是输出结果
CURLOPT_RETURNTRANSFER =>1,
# 不要头部信息
CURLOPT_HEADER => false
));
$data = curl_exec($ch);
return $data;
}
# 获取签名
function make_signatrue( $url) {
$str = rawurlencode( implode($url, "&"));
$str = str_replace("%3A", "%253A", $str);
$str = "GET&%2F&" . $str;
$hmac = hash_hmac("sha1", $str, ACCESSKEYSECRET . '&', TRUE);
$signature = base64_encode($hmac);
return $signature;
}
/*
* @info []
* DomainName, RR - 主机记录, Type, Value, TTL, Priority
*/
function add_record($info = null) {
//echo MY_DOMAIN; die();
$url = "http://alidns.aliyuncs.com/?Action=AddDomainRecord".
"&DomainName=" . MY_DOMAIN .
"&RR=test".
"&Type=A".
"&Value=127.0.0.1".
"&TTL=1000".
"&Line=default".
"&Format=JSON".
"&Version=2015-01-09".
"&AccessKeyId=" . ACCESSKEYID .
"&SignatureMethod=HMAC-SHA1" .
"&Timestamp=" . date("Y-m-d\TH:i:s\Z").
"&SignatureVersion=1.0".
"&SignatureNonce=" . microtime(true);
$arr_url = preg_split("#[\&\?]#", $url);
array_shift($arr_url);
asort($arr_url);
$url .= "&Signature=" . make_signatrue($arr_url);
return uget($url);
}
var_dump (json_decode(add_record()));
输出的结果
首页运行成功的输出
:php add.php
object(stdClass)#1 (2) {
["RecordId"]=>
string(16) "4001912792253440"
["RequestId"]=>
string(36) "9B4EBCC2-0FE7-4F59-AA1C-7386DF031D41"
}
再次运行提示记录已经存在
php test.php
object(stdClass)#1 (4) {
["RequestId"]=>
string(36) "3CE2D815-44DC-48EB-AE62-C0947E31755C"
["HostId"]=>
string(19) "alidns.aliyuncs.com"
["Code"]=>
string(21) "DomainRecordDuplicate"
["Message"]=>
string(30) "The DNS record already exists."
}
感谢up主的分享。
我试了下,阿里的云解析接口我调用不了,返回的数据是:InvalidVersion.Unpaid;You need to upgrade VIPDNS;CAA记录仅支持云解析DNS收费版。
请问博主有遇到这个问题吗?感恩~
我测试时候,是添加了一个 A记录测试下,是正常的。 CAA记录没测试,如果有问题可能是 CAA记录中一个空格处理不当。不过你的提示,说的是CAA记录只能用收费版的DNS。
随机出现special.signature