目录
前言
事情是这样的,昨天我有一台A服务器的https证书过期了。A服务器的证书是从B服务器上使用acme签发的泛域名证书拷贝而来的。之所以搞得那么麻烦还是因为之前懒得给A服务器注册一个域名,直接共享了B服务器的证书,结果昨天B服务器的证书过期了,然后acme那个自动续签证书的定时任务又没有跑起来,我猜是网络波动吧,反正结果而言就是两台服务器的部分服务都受影响了。于是我为了避免下次证书过期不会自动续签出现同样问题,就下定决心注册个新域名。
寻找合适的域名注册商
原本是打算从阿里云上找个便宜容易记忆的域名,但是找半天发现要不就是被注册要不就是贵的要死,我这也不是很重要的业务,犯不上用什么白金域名,但是觉得人工找效率实在太低了,考虑到自己只是想要容易记的域名,但并不需要有特殊意义,就干脆了写了个爬虫程序帮忙找个三字母的二级域,找了一千多个,发现找出来的域名价格还是太贵了。然后想了想主要还是因为阿里云便宜的顶级域名太少了,那就换个域名注册商试试看吧。
结果就找到了https://www.namesilo.com/这一家。之所以找这家还是因为知乎文章说的,国外注册商,域名免备案,不需要实名认证,顺带whios就不会暴露太多个人信息,国内嘛,只能绕一绕,还有就是注册个邮箱就能买,支付方式多,除了常规的paypal,visa以外,国内的支付宝和微信支付都支持。
域名检索
我打开这网站注册了个号,就开始域名检索。然后就被支持的顶级域数量所惊到了,如下图所示,肉眼可见密密麻麻的数量,后面还有超级多就不截全了,用代码数了一下按钮足足有405个相当的夸张。虽然说业务有一定规模还是得老老实实搞个.com,但是搞些开发测试或者喜欢域名个性一点的,那这些花里胡哨的顶级域就相当适合了,顺带一提有些意味深长的顶级域比如(.wtf|.sucks|.sexy)。
当然顶级域这么多,自然便宜的少不了,其中最便宜的就是0.99刀。比如.xyz,这价格换算成软妹币比阿里贵一丢丢,但是想想上面那些好处还是划算的,而且超过1刀的顶级域是可以通过优惠码减免的,比如.com加上优惠码,最便宜是6.89刀,当前换算起来就是44.80元,这可比阿里55元便宜不少,还是有一定吸引力的好吧。
域名注册
刚开始我还是打算拿英语词典里的短单词作为二级域的,但发现大部分三字母的二级域都超过了0.99刀,后来就选择了个四字母二级域。
写个爬虫程序帮忙找域名
今天想想可能以后还需要新域名,就决定仿照阿里云域名查询程序,写了namesilo版本的。结果打开开发者工具分析域名查询接口就懵了,如下图所示
表单类型是multipart/form-data,其次这是个数组参数,但是按照以往使用requests库的经验,post传表单参数是通过字典构造的。这下子参数名重名,字典理论上来说是处理不了的。嘛嘛,惯例还是得靠大佬们怎么解决的。首先是解决构造multipart/form-data表单内容,翻了几篇博客总算是在腾讯云社区里找到解决方案了。我这直接贴原文代码示例吧:
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields={'field0': 'value', 'field1': 'value',
'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
)
r = requests.post('http://httpbin.org/post', data=m,
headers={'Content-Type': m.content_type})
这里用到一个requests_toolbelt库里面一个叫MultipartEncoder来构造表单内容,表单内容往常一样,字典构造就行了。接着是表单重名问题,试过合并参数名,参数值通过列表来传,不行。于是还是网上找找解决方案,找老久总算是找到了。方法就是每对参数使用元组来构造,所有参数用一个大元组装起来。我这里就贴一下自己写的部分源码吧
# 通过元组构造表单内容,解决参数名重名问题
data = tuple([('tlds[]', x.split('.')[1]) for x in domains] + [('domains[]', x) for x in domains])
# 使用MultipartEncoder把表单内容转换为multipart/form-data类型
m = MultipartEncoder(
fields=data)
res = requests.post('https://www.namesilo.com/public/api/domains/bulk-check', data=m,
headers={'Content-Type': m.content_type})
到此为止两个问题就算是完全解决了。
引用文章:
Python 3 之 Requests快速上手: Python爬虫利器Requests库的用法, Requests库简明使用教程
PS:自己辣鸡代码熟练度,硬是折腾了大半天,说白基础还是太差了,不过好说歹说也算是把问题给解决了,想了想很久没水博客了就把解决问题的过程给分享出来了。