|
昨天有个朋友说有22的api,想抢注中文域名,但总提示验证失败,让我帮着调试一下(付费的,费用此处略过,建议大家尽量自已动手解决问题)。我随手看了下22的api手册,看上面可以注册中文域名,心想应该不复杂,就答应下来了。今天中午开始通过QQ远程协助调试,比想像的要复杂一些,不过最终还是搞定了,在此特意把调试过程记录下来,以方便其他用户参考。
1、打开22的api手册,看注册部分,和身份认证有关的说明如下:- string mode = "reg";
- string domainname = Server.UrlEncode("测试域名.中国");
- int userid = 1; //会员ID
- string sign = Lib.md5(Lib.md5(userid.ToString(), 32) + Lib.md5("pwd", 32) + Lib.md5(domainname, 32), 32);
复制代码 首先,如果是中文域名的话,需要进行url编码,而且参与md5加密运算的域名变量,也是url编码后的域名值;所以现在论坛里那个注册英文域名的模板在这里就不好使了,原因是,虽然可以选中以utf-8编码发送,来对域名变量进行url编码,但参与md5运算的域名变量,还是未经过url编码的值,如下图:
2、所以,为了让md5运算能有一个正确的url编码过的域名变量值,这里需要手工指定一个多余的变量(即api本身不需要的变量,完全是为md5计算需要),domain1,我们以“地址.中国”为例,随便找一个url编码工具,或在线编码工具(比如:http://www.mxcz.net/tools/Url.aspx),或者用php或asp写一行脚本也行,最后计算出url编码后的域名变量是:%E5%9C%B0%E5%9D%80.%E4%B8%AD%E5%9B%BD,将这个变量和域名变量写在同一行里,最后结果如图:
从图中可以看出,domainname还是直接写中文域名,domain1是为了md5计算,而手工算出一个编码的值,这里要注意的是,上面必须要选择使用utf-8编码发送,否则的话,domainname变量不会被url编码的,最终还是会出错。
3、本来以为这样就万事大吉了,结果提交还是提示认证失败,结果又改成不同编码,来来回回试了N次,还是不行,最后想到api手册的例子是用asp.net写的,干脆写一行代码比较一下url编码后的值和自已填的是否一样,于是在本机写了一行asp.net脚本运行了一下,结果发现,asp.net生成的url编码是小写的,我之前写的是大写的,真是让人无语。于是马上把domain1变量的值,改成小写的,再次提交测试,终于成功了,此处省略截图。
4、总结,对于中文域名的抢注有很多问题都很容易造成申请失败,大部分都是和编码有关的,
- 首先,一般我们还是应先看api接口的编码格式,如果是GBK编码的,程序里就不要选中“以utf-8编码发送和返回”,反之,则应选中相关选项;
- 其次,对于中文域名,可能有的支持直接写中文域名,有的可能需要转码,也要分别对待;
- 最好,对于一些其他特殊的问题,就像上面说的22的api的md5验证方式,也要特别对待。
再总结一下22的api抢注中文设置流程:
1、选中以utf-8发送和返回数据选项(两个复选框);
2、计算中文域名的url编码,用以上提到的各种方法;
3、如果url编码得到的是大写,还需要全部转换成小写,可以用word或editplus,一般文字处理工具,都有这个功能;
4、单起一个新变量(随意命名,但需要和md5公式里的域名变量对应),和域名变量放在同一行中。
最后把写好的22api中文域名模板放上来,供大家下载:
http://www.domain-capture.com/forum.php?mod=viewthread&tid=123
|
|