分享 阿里动态域名解析 安卓版和windows
前段时间做了一个医疗仪器的安卓软件,用家里的旧安卓手机做了服务器,用的是阿里云的域名服务,我的公网ip是动态的,平时还是很稳定的,只要不关wifi,一般就不会变化,可有一段时间,明明没有断电,公网ip却两三天变一次,甚至一天变几次,这严重影响了客户的访问。阿里云提供的控制台软件只能手动设置域名对应的ip,不能自动更新。网上有大把windows的动态域名解析版本,却没看到有安卓用的。我便想有了自己做一个的想法。春节期间正好有空,于是做了这个软件。
我是用c++builder xe来做的,有两种方式可以调用阿里云的服务,一种是用http方式直接和dns服务器通讯,一种是用阿里云提供的安卓的SDK开发包来做。用SDK来做调用简单,是几句话就能搞定的事,可是在实际使用时,一个jar包搞不定,用到的阿里云的jar包还调用别的外部的jar包,于是这下捅了马蜂窝,由本来只缺的一个包,从其申名中找到另一个包,那个包却缺更多的jar包的支持,又得去找更多的来,于是,三姑婆六姨妈的来了一大堆,还没看到尽头... 这个我惹不起还躲不起,我不用了还行不行?接下来我换用http方式使用阿里云的http api规则来调用dns的服务,这下清静了,只需关注api规则的实现,别的外部资源都不需要装了。
说到这里,吐槽一下,也不知到阿里密匙的签名(Signature)机制是谁写的,非常别扭,和多数人的思维不一样,关键地方还语意模糊,一下带过,不做强调,不小心就会弄错。如这里 https://help.aliyun.com/document_detail/29747.html?spm=a2c4g.11186623.2.3.pugYas 的这句话。“percentEncode(CanonicalizedQueryString)是对第1步中构造的规范化请求字符串按1.b中描述的URL编码规则编码后得到的字符串。”,我死了无数脑细胞才看懂,本了就规范化了的字串,就因为加了几个符号,就还要再规范化一次,又费马达又费电,有这个必要吗? 还有这句,“a) 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到Signature参数本身)进行排序” 干脆就没有说明真正的规则,字典顺序?字典中大A和小a有说明谁排在前吗?只要是a,不管大小大写都比b小,还是大写字符都比小写的小?这些都没说明,得自己去不断的试错... 最后才知道是按字符内码的值排的序!另外这句 “ ii. 对于其他字符编码成“%XY”的格式,其中XY是字符对应ASCII码的16进制表示。” 这个16进制中,a,b,c,d,e,f是使用大写还是小写也没有说明,怪不得网上一大堆签名通不过的!!!
历经曲折,本来别的开发软件用sdk开发包一两天就能写好的代码,c++builder xe上,我用http api,恁是用了好多天的时间才做好。聊以自慰的是编译出了两个平台的版本,本来苹果版也能做的,我没用苹果的,也就没编译。下面是软件的下载地址,有需要的可下载来用,有问题就跟贴好了。
阿里动态域名解析 安卓版和windows
https://pan.baidu.com/s/1smvZidZ