|
本部分讲解一下如何根据api文档,设置变量内容,本来想用22的api作为范例的,结果文档找不到了(本人并不是22的分销商),所以找了一个N年前的新网的api文档作为示例。下面摘录api文档中注册部分,如以下代码:- 3.2 Register 接口
- POST 地址: http://www.paycenter.com.cn/cgi-bin/Register
- POST 参数:
- [域名信息]
- dn 域名;1个,包括名字和后缀
- enc 编码,E,G;1个;
- client 代理号;1个
- checksum MD5加密摘要
- period 注册年数;[如果不填默认为1年],有效值1-10年
- url URL转发[通用网址需要,如果不填默认为www.xinnet.com]
- [注册所有人或注册单位的信息]
- uname1 注册人中文单位名称 [必须]
- uname2 注册人英文单位名称 [必须]------------------- 必须英文,且中间有一个空格
- uname3 注册单位拼音 [.中国\通用网址必须] ---------- 必须为字母
- uname4 注册单位缩写 [.中国\通用网址必须] ----------
- location 注册人单位所在地 [注册.中国\通用网址必须]
- rname1 注册人|单位负责人中文名称 [国内域名必须]
- rname2 注册人|单位负责人英文名称 [国际域名必须]
- ust 注册人英文国家名称 两个字母[CN表示中国],接口自动翻译中文
- uprov 注册人英文省份名称 如:Beijing,接口自动翻译中文
- ucity1 注册人中文城市名称 [国内域名必须]
- ucity2 注册人英文城市名称 [国际域名必须]
- uaddr1 注册人中文地址 [国内域名必须]
- uaddr2 注册人英文地址 [国际域名必须]
- uzip 注册人邮政编码 [必须]
- utelc 注册人电话国家码, 可以不填默认为86
- utela 注册人电话区号 如果为手机可以不填,此项不可为0
- uteln 注册人电话号码
- utele 注册人电话分机
- ufaxc 注册人传真国家码, 可以不填默认为86
- ufaxa 注册人传真区号 如果为手机可以不填,此项不可为0
- ufaxn 注册人传真号码 必须为数字
- ufaxe 注册人传真分机
- uemail 注册人email地址
- trade 注册人所在行业英文编码 [如果不填,默认为商业S8]//此字段最好不填,如果填写,千万不能用小写S
- [域名管理联系人信息] 管理联系人单位地址信息和注册人信息一致,所以不用填写
- aname1 管理联系人中文名称 [国内域名必填]
- aname2 管理联系人英文名称 [国际域名必填]
- atelc 管理联系人电话国家码 可以不填默认为86
- atela 管理联系人电话区号 如果为手机可以不填
- ateln 管理联系人电话号码
- atele 管理联系人电话分机 可以不填,此项不可为0
- afaxc 管理联系人传真国家码,可以不填默认为86
- afaxa 管理联系人传真区号,如果为手机可以不填 可以不填,此项不可为0
- afaxn 管理联系人传真号码
- afaxe 管理联系人传真分机
- aemail 管理联系人电子邮件地址 [必须]
- 说明:管理联系人和注册人的电话和传真必须保证一份为填写完整的。
- 否则,如果管理联系人电话传真缺少,将使用注册人的电话传真
- 如果注册人电话传真缺少,将使用管理联系人的电话传真
- 如果注册人没有email地址,将使用管理联系人的email地址
- POST 数据,都必须进行URL编码,否则中文信息将不正确
- 验证:client和POST的来源IP必须与该代理填写的地址一致
- checksum=MD5("Register"+client+password+dn+aemail+unit2)
- "Register"为字符串常量,表示接口名称。
- 其他没有引号表示为POST参数变量,password为代理专区中设置的认证密码
- client为客户号,dn为域名,aemail为管理联系人电子邮件,unit2为注册单位英文名称
复制代码 下面逐条说明:
- POST 地址: http://www.paycenter.com.cn/cgi-bin/Register,因为是post方式发送,所以不需要对接口地址进行其他设置,直接将地址贴上去即可,注意请求模式必需选为post,否则会出错。
另外需要注意的是文档里已明确提示:“POST 数据,都必须进行URL编码,否则中文信息将不正确”,所以必须选中“使用utf-8编码发送”,返回信息是否为utf-8编码,根据实际情况选择即可,这个即使选错了,顶多是api接口返回的信息是乱码,并不影响你注册成功与否,自已设置一两次就能试出来了。 - 然后参照接口说明,把一些常规信息都写在固定内容框里,如以下代码及截图:
- action===Register
- client===agent123
- aemail===caozh@xinnet.com
- enc===E
- uname1===北京新网数码信息技术有限公司
- uname2===Xin Net Technology Corp.
- rname1===测试
- rname2===test one
- uaddr1===北京亦庄经济技术开发区北工大软件园2号楼1层
- uaddr2===1st Floor,2nd Building Section A,BDA BeiGongDa Software Area, Beijing
- ust===cn
- uprov===Beijing
- ucity1===北京
- ucity2===Bejing
- uzip===100176
- utela===010
- uteln===58022118
- ufaxa===010
- ufaxn===58022118
- uemail===caozh@xinnet.com
- aname1===曹中会
- aname2===Cao Zhonghui
- atela===010
- ateln===58022118
- afaxa===010
- afaxn===58022118
复制代码 这个文本框叫固定内容,意思就是它里面的变量的值是固定的,不变的,所以适合填写联系人信息等不变的内容;但比如这个变量的值是变化的,你就要考虑将这个变量放在动态内容框里。
注意变量名必须和接口规范完全一致,变量值和变量名之间用三个半角等号“===”分隔。另外需要说明的是,如果不是必须填写的话,可以不写,只要能注册成功就成,当然把信息都写上也没问题。
- 动态内容:这个提供了两个文本框,分别是动态内容1和动态内容2,在使用中只用一个、或两个都用、或两个都不用,以及使用顺序等都随意。动态内容里适合放每次值都不一样的变量,或者需要循环的变量,也可以是一组变量,在使用中程序每次从中提取一行,按照从上至下的顺序循环。我们举例说明:
a、比如我们想循环抢注三个域名,就可以按以下方式设置,注意本程序现在是单线程,只能循环查询/抢注,不能并发:- dn===domain-capture.com
- dn===baidu.com
- dn===domain.cn
复制代码 b、再比如我们还是循环抢注那三个域名,而且要每个域名对应一个注册人,可以按以下方式设置,需要注意的是,因为固定内容里已经注册人这个变量,如果把注册人这个变量移动动态内容中,需要在固定内容里删除这个变量,否则变量就重复了:- dn===domain-capture.com|||uname1===张三
- dn===baidu.com|||uname1===李四
- dn===domain.cn|||uname1===抢注机
复制代码 这样,每一行其实是一个变量组,同时使用
c、如果我们想给每个域名指定一个分销商帐号和密码呢,按以下方式设置:- dn===domain-capture.com|||client===张三|||password===123456
- dn===baidu.com|||client===李四|||password===123456
- dn===domain.cn|||client===抢注机|||password===123456
复制代码 d、注意,变量名不管在哪里出现,不要有重复。动态内容的截图如下:
- 时间变量:这个是以前铭万的api里会用到的,就一直保留了,现在不知还用的多不多了,铭万的api要求每次还提交一个时间变量过去,那会还没有whois模式,他们也没限api,所以如果一秒内发多个请求过去,时间不就全一样了吗,所以出现了这个时间变量,它会虚拟出时间来,保证每次发出去的都不相同,设置好对应的时间格式和时间变量名就行了,在whois模式下,应该没什么太大用了。
- 域名变量名:这个很重要,这是告诉程序,哪个变量名是保存域名的,系统要用这个变量名的值去进行whois查询,如果这个变量是个动态的变量,则循环这个变量去进行whois查询,如果按照上面动态内容的示例,我们设为dn即可,如下图所示,这个变量在抢注模式下没作用。
- md5变量组:这玩意没学过编程的同学可能会晕,md5是一个加密算法,api接口验证用户的合法性,基本都使用md5值进行匹配了。
比如上面的示例,新网是这么要求的:checksum=MD5("Register"+client+password+dn+aemail+uname2),"Register"是一个字符串,是死的;client是变量,代表用户名,我们假设值是“agent12345”;password代表用户密码,我们假设值是“123456”;dn代表域名,我们假设值是“domain-capture.com”;aemail代表注册人email地址,假设值是“domain@capture.com”;uname2代表注册人英文,给它个假设值“bush”。最后需要加密的明文就是Register+agent12345+123456+domain-capture.com+domain@capture.com+bush = Registeragent12345123456domain-capture.comdomain@capture.combush,然后把这一串文字进行md5加密,生成一个16位或32位的密文,发送给服务器,服务器端也会根据你传来的信息以及你设置的密码,生成一串明文,也进行一次md5加密,然后两边比对,密文值相同,则认为你是合法访问。
刚说了这么多,其实这个地方就是写md5计算公式的,我们先来看看新网的md5公式在程序里怎么设置,如下:"Register"+client+"123456"+dn+aemail+uname2
半角引号括起来的就代表字符串,其它的就代表是变量,要确保变量在固定内容或动态内容已经定义。
现在api接口的md5公式越来越复杂了,刚才新网那个算简单的,我们来看看22的这个md5变量是怎么要求的:sign = md5(md5(userid)+md5(pwd)+md5(domainname)),里面有md5嵌套,如果在程序里设置,写法如下:
{{{userid}}}+{{{pwd}}}+{{{domainname}}},三对大括号括起的变量会先进行md5计算,然后将结果组合,再进行md5计算,最后得出sign变量的值,这里就非常灵活了,可以进行多种组合了,常量,md5(常量),变量,md5(变量),基本可以应付现在的需要了,在公式的左边还附带了一个简单的md5计算器,用于临时计算md5值使用。这里再多说几句关于md5变量的设置,这次我们拿中国数据的api为例,因为他的md5验证比较有代表性,而且用到了大部分类型,我们先看api规范相关内容,如下图所示,md5变量名是checkSum,计算规则是,md5(u_name+u_pass+act+checkTime),其中,u_name是会员名(固定内容变量);u_pass是将会员密码进行16位MD5加密后的结果;act是操作符(固定内容变量),checkTime时间字符串(为时间变量,将当前时间转换为如下格式的数字串:yyyyMMddHHmmss),下面我们来写md5公式:
1、u_name直接写变量名即可;
2、u_pass是密码进行16位md5加密后的值,因为程序本身没有这个功能,所以这里先用程序附带的md5计算器,算出这个值,然后以字符常量写在公式里就行了,如图所示,这里还须提醒一下,常量在md5公式中的表示方法是半角双引号,即"domain-capture",而且常量是不支持md5嵌套的写法的,比如这样写是不对的{{{"domain-capture"}}},遇到这种情况,直接先计算出md5值,然后以常量方式表示即可;
3、act直接写变量名即可;
4、checkTime是时间变量,在程序中也有专门的地方设置,我们要做的就是写好时间变量名,然后设置正确的时间格式即可,抢注过程中,程序会自动生成当前时间,并转换成你指定的格式,赋值给变量,很方便吧,如图所示。
最终的结果就是:checkSum=md5(u_name+"49ba59abbe56e057"+act+checkTime),效果如图所示。
api规则
md5计算器
时间变量设置
最终效果
最后,需要注意的是:
- 设置变量要严格参考api说明,差一点都不行;
- 变量名不要设置重复;
- 动态变量多行间格式要统一;
- md5公式中用到的变量要在固定内容或动态内容中存在;
- 程序提交前会进行基本的变量检查,有明显的错误,会给出提示。
|
|