阿里雲動態域名解析
阿新 • • 發佈:2019-01-28
1.如果不想用花生殼這類的工具,可以利用阿里雲的動態域名解析api來動態解析域名。
2.原理就是定期檢查ip是否改變,如果改變就利用api重新解析域名
一、pom.xml
<dependencies>
<!--retrofit-->
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version >2.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.squareup.retrofit/converter-gson -->
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version >2.2.0</version>
</dependency>
<!--ok-http-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.7.0</version>
</dependency>
<dependency >
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-alidns</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.5.0</version>
</dependency>
</dependencies>
二、
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsRequest;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordRequest;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import http.RetroFitHelper;
import java.util.List;
public class start {
private static IAcsClient client = null;
static {
String regionId = "cn-hangzhou"; //必填固定值,必須為“cn-hanghou”
String accessKeyId = ""; // your accessKey
String accessKeySecret = "";// your accessSecret
//或者設定為空,然後下邊有從阿里雲獲取的方法,只是不建議每次都去阿里雲獲取。
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
// 若報Can not find endpoint to access異常,請新增以下此行程式碼
// DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Alidns", "alidns.aliyuncs.com");
client = new DefaultAcsClient(profile);
}
public static void main(String[] args) throws Exception {
String domain = "xxx.com"; //頂級域名
String rr = "yyy";//子域名
DescribeDomainRecordsResponse.Record record = GetRecordId(domain, rr);
String recordId = record.getRecordId();
String ip = record.getValue();
if (recordId==null|| recordId == "") return;
if (ip==null|| ip == "") return;
String curIp = RetroFitHelper.getCurIp(); //獲取對外ip地址
if (!ip.equals(curIp)){
UpdateDomainRecordRequest request = new UpdateDomainRecordRequest();
request.setRecordId(recordId);
request.setRR(record.getRR());
request.setType(record.getType());
request.setValue(curIp);
request.setTTL(record.getTTL());
request.setLine(record.getLine());
request.setPriority(10l);
UpdateDomainRecordResponse response = client.getAcsResponse(request);
System.out.println(response.getRecordId());
}
}
private static DescribeDomainRecordsResponse.Record GetRecordId(String domainString,String rr) {
DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest();
request.setDomainName(domainString);
request.setRRKeyWord(rr);
DescribeDomainRecordsResponse response;
// describeRegionsRequest.setProtocol(ProtocolType.HTTPS); //指定訪問協議
// describeRegionsRequest.setAcceptFormat(FormatType.JSON); //指定api返回格式
// describeRegionsRequest.setMethod(MethodType.POST); //指定請求方法
// describeRegionsRequest.setRegionId("cn-hangzhou");//指定要訪問的Region,僅對當前請求生效,不改變client的預設設定。
try {
response = client.getAcsResponse(request);
List<DescribeDomainRecordsResponse.Record> list = response.getDomainRecords();
for (DescribeDomainRecordsResponse.Record record : list) {
if (domainString.equals(record.getDomainName()) && rr.equals(record.getRR())) {
return record;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}