携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天 点击查看活动详情
前言
前几天使用scrapy 获取到了七牛云cookie(在scrapy 使用selenium模拟登录获取cookie),今天就来分析其他的接口,把这个cookie拿来申请域名测试一下,昨天也做好了一个腾讯云的域名解析申请的脚本,两个连接起来后面就有大用了。
scrapy selenium脚本化
需要把seleium的代码直接迁移到普通脚本中来,封装成一个函数,大概就是这样子:
# coding=UTF-8
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_cookie():
chorme_options = Options()
chorme_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chorme_options) # 初始化Chrome驱动
driver.implicitly_wait(20)
driver.get(url='https://sso.qiniu.com/') # 直接访问登录页
user_input = driver.find_element(By.ID, 'email') # 获取用户名输入框
user_input.send_keys(user_name) # 输入用户名
password_input = driver.find_element(By.ID, 'password') # 获取密码框
password_input.send_keys(password) # 输入密码
driver.find_element(By.ID, 'login-button').click() # 登录
try:
WebDriverWait(driver, 60).until(EC.visibility_of_element_located(
(By.CLASS_NAME, "user-plane-entry"))) # 等待网页跳转,超时等待60秒
except:
print('登陆超时,失败') # 等待超过了60
driver.quit()
cookie = driver.get_cookies() # 获取cookie 此时是键值对
print(cookie)
return cookie
get_cookie()
申请证书接口
F12打开谷歌调试工具,点击NetWork,登录七牛云,接着手动申请证书,看看有哪些请求:
可以看到有两个请求,第二个最重要,我们要拿到这个order_id。
补全信息
我们再手动去补全信息,申请证书得到order_id立马就去补全,补全就会返回txt的记录名和记录值,看下调试工具:
有好几个请求,有两个非常重要,一个是第一个,在Payload提交了一个我自己预设的模板,没有返回任何有用的信息,非常简单的:
{"code":200,"message":""}
第二个就是第三个请求,完整的请求链接是:https://portal.qiniu.com/api/certificate/v1/sslorder/62f2794c451******d320,查询到和这个订单ID为62f2794c451*******320需要我们去域名的DNS解析商那里添加解析的内容。
就这么简单,三个接口就完成了订单创建,订单信息补全,订单信息查询。接下来就是对接昨天写的域名解析的接口,再开始不断得轮询这个证书的状态就行了。
检查证书状态
因为昨天已经完成了腾讯云的添加NDS解析,今天略过DNS解析这个步骤然后直接来看看如何检查证书是不是已经可以下载了。
检查证书还是上面对的接口:https://portal.qiniu.com/api/certificate/v1/sslorder/
查看这个接口是否里面的certID是否为空,下面是刚刚创建的订单
我现在再找一个已经可以下载的订单:
所以这样就可以下载了
整理代码
因为篇幅和个人时间有限,今天就把上面所说的三个接口整理分享出来,后面的证书设置密码,下载,甚至后面的Git上传放在明天或者后天。
三个接口主要拆分成两个部分也就是两个函数,一个是创建订单填写信息,第二个就是循环检查订单状态,今天整理一共三个函数方法,后面再去合并做成一个完整的功能:
# coding=UTF-8
import requests
import json, time
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
user_name = '********@qq.com'
password = '*********'
headers = {
'authority': 'portal.qiniu.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
'content-type': 'application/json',
'accept': '*/*',
'origin': 'https://portal.qiniu.com',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': 'https://portal.qiniu.com/certificate/apply',
'accept-language': 'zh,zh-CN;q=0.9',
}
def create_ssl(common_name, cookie):
data = '{"product_short_name":"TrustAsiaDVG5","years":1,"limit":0,"wildcard_limit":-1,"product_type":"single"}'
response = requests.post('https://portal.qiniu.com/api/certificate/v1/sslorder/prepare', headers=headers, data=data)
res = json.loads(response.text)
print(res)
order_id = res['data']['order_id']
data = {"common_name": common_name, "org_addressLine1": "**********", "org_city": "深圳市",
"org_region": "广东", "org_country": "CN", "org_postalCode": "430000",
"org_organization_name": "**********", "org_division": "***部", "org_phone": "027-2306240",
"admin_firstName": "*", "admin_lastName": "**", "admin_phone": "17720515973",
"admin_email": "*****@***.com", "orderid": order_id, "auth_method": "DNS",
"admin_title": "********", "dns_names": "", "cert_name": common_name, "encrypt": "RSA",
"toBeDeployedDomains": []}
response = requests.post('https://portal.qiniu.com/api/certificate/v1/sslorder/create', headers=headers,
cookies=cookie, data=data)
print(response.text)
response = requests.get('https://portal.qiniu.com/api/certificate/v1/sslorder/' + order_id, headers=headers,
cookies=cookie)
res = response.json()
print("证书申请成功,域名为:" + common_name + " TXT记录名:" + res['data']['auth_array'][0]['AuthKey'] + " TXT记录值:" +
res['data']['auth_array'][0]['AuthValue'])
return {'AuthKey': res['data']['auth_array'][0]['AuthKey'],
'AuthValue': res['data']['auth_array'][0]['AuthValue']} # 返回记录值
def check_status(order_id, cookie):
response = requests.get('https://portal.qiniu.com/api/certificate/v1/sslorder/' + order_id, headers=headers,
cookies=cookie)
res = response.json()
if res['data']['certID'] == '':
return False
else:
return True
def get_cookie():
chorme_options = Options()
chorme_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chorme_options) # 初始化Chrome驱动
driver.implicitly_wait(20)
driver.get(url='https://sso.qiniu.com/') # 直接访问登录页
user_input = driver.find_element(By.ID, 'email') # 获取用户名输入框
user_input.send_keys(user_name) # 输入用户名
password_input = driver.find_element(By.ID, 'password') # 获取密码框
password_input.send_keys(password) # 输入密码
driver.find_element(By.ID, 'login-button').click() # 登录
try:
WebDriverWait(driver, 60).until(EC.visibility_of_element_located(
(By.CLASS_NAME, "user-plane-entry"))) # 等待网页跳转,超时等待60秒
except:
print('登陆超时,失败') # 等待超过了60
driver.quit()
cookie = driver.get_cookies() # 获取cookie 此时是键值对
print(cookie)
return cookie
总结
今天天稍微重新验证了一下七牛云的域名申请,时隔差不多一年没有什么变化,明天再接着做一个证书下载的功能,需要注意的是下载之前需要选择类型并且设置密码才能下载,如果精力够的话明天一起把使用Python代码解压带密码的文件功能完成。