namesilo注册新域名顺带解决python requests库处理multipart/form-data表单以及参数重名问题

目录

 

前言

寻找合适的域名注册商

域名检索

域名注册

写个爬虫程序帮忙找域名


前言

事情是这样的,昨天我有一台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})

到此为止两个问题就算是完全解决了。

引用文章:

python3+requests:pos

Python 3 之 Requests快速上手: Python爬虫利器Requests库的用法, Requests库简明使用教程

PS:自己辣鸡代码熟练度,硬是折腾了大半天,说白基础还是太差了,不过好说歹说也算是把问题给解决了,想了想很久没水博客了就把解决问题的过程给分享出来了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限超频

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值