8
8
from openpyxl .workbook import Workbook
9
9
from openpyxl .styles import Alignment
10
10
11
- class get_require_info (object ):
11
+ class get_required_info (object ):
12
12
"""
13
13
获取必要的Cookie、Token,以及各类的POST请求由这里的post_tool()完成,
14
14
"""
@@ -24,37 +24,37 @@ def __init__(self) -> None:
24
24
25
25
def post_tool (self , url , data , json , header ):
26
26
try :
27
- response = post (url , data = data , json = json , headers = header , timeout = 2 )
27
+ response = post (url , data = data , json = json , headers = header , timeout = 10 )
28
28
response_code = response .json ()['code' ]
29
29
response_msg = response .json ()['success' ]
30
30
if response_code == 200 and response_msg is True :
31
31
return response
32
32
elif response_code == 200 and response_msg is False : # 验证错误,需要重新获取验证图片
33
33
return 'pic_check_fail'
34
34
elif response_code == 401 : # Token 过期
35
- print (f"{ ' 刷新Token ' :-^57} " )
36
- return self .get_token ()
35
+ print (f"{ ' 刷新Token请重试 ' :-^54} " )
36
+ self .get_token ()
37
+ return - 1
37
38
elif response_code == (500 or 501 ):
38
39
return 'server_error'
39
40
elif response .status_code == 403 : # WAF 触发,只有这个会正确返回状态码,其他的错误状态码响应的是200
40
41
print (f"{ ' 触发防火墙了,过几分钟再试吧 ' :*^50} " )
41
42
exit ()
42
43
except Exception as err :
43
- return f'error:{ err } '
44
+ return print ( f'error:{ err } ' )
44
45
45
46
def get_cookie (self ):
46
47
cookie = get (url = self .base_header ['Origin' ], headers = {'User-Agent' :self .base_header ['User-Agent' ]}, timeout = 1 )
47
48
self .base_header .update ({'Cookie' : cookie .headers ['Set-Cookie' ].split (';' )[0 ]})
48
49
49
50
def get_token (self ):
50
- print (f"\n { ' 获取Token中,服务器响应时快时慢 ' :-^46 } " )
51
+ print (f"\n { ' 获取必要参数 ' :-^53 } \n " )
51
52
time_stamp = round (time () * 1000 )
52
53
auth_key = md5 (f'testtest{ time_stamp } ' .encode ('utf-8' )).hexdigest ()
53
54
auth_data = {'authKey' : auth_key , 'timeStamp' : time_stamp }
54
55
token_request = self .post_tool (self .auth_url , auth_data , "" , self .base_header )
55
56
token_result = token_request .json ()['params' ]['bussiness' ]
56
57
self .base_header .update ({'Token' : token_result , 'Accept' :'application/json' })
57
- print (f"\n { ' 已获得Token ' :-^56} \n " )
58
58
59
59
class file_tool (object ):
60
60
"""
@@ -71,7 +71,7 @@ def file_writer(self, file_path, file_name, file, wr_mode, wr_type):
71
71
self .file_content = f .read ()
72
72
return self .file_content
73
73
74
- class query_info (get_require_info , file_tool ):
74
+ class query_info (get_required_info , file_tool ):
75
75
"""
76
76
输入过滤,只对中文输入做过滤,英文域名由于有些域名不在可备案列表内也能备案,所以不做过滤了
77
77
"""
@@ -82,18 +82,22 @@ def __init__(self) -> None:
82
82
def regular_input (self ):
83
83
print (f"{ ' 输入 域名/备案号/完整公司名 以查询备案信息 ' :-^40} \n " )
84
84
info_input = input ('查询对象:' ).replace (' ' , '' ).replace ('https://www.' , '' ).replace ('http://www.' , '' ).replace ('http://' , '' ).replace ('www.' , '' )
85
- if info_input == '' :
86
- print (f"\n { ' 请输入正确域名 ' :*^52} \n " )
87
- return - 1
88
- elif '\u4e00 ' <= info_input <= '\u9fff ' :
85
+ if '\u4e00 ' <= info_input <= '\u9fff ' :
89
86
input_result = re .sub ('[^\\ u4e00-\\ u9fff-A-Za-z0-9,-.()《》—()]' , "" , info_input ) # 中文输入混入的特殊符号,只允许:-—《》()().
90
- else :
87
+ elif '.' in info_input :
91
88
input_result = info_input
92
- self .query_text = {'pageNum' : 1 , 'pageSize' : 40 , 'serviceType' : 1 , 'unitName' : input_result } #serviceType: 1:网站 6:APP 7:小程序 8:快应用
89
+ elif info_input == '' or '.' not in info_input : # 空值和只输入英文字母没有域名的.则返回错误
90
+ print (f"\n { ' 请输入正确域名 ' :*^52} \n " )
91
+ return - 1
92
+ self .query_text = {'pageNum' : 1 , 'pageSize' : 100 , 'serviceType' : 1 , 'unitName' : input_result } #serviceType: 1:网站 6:APP 7:小程序 8:快应用
93
93
94
94
def query_information (self ):
95
95
print (f"\n { ' 查询中 ' :-^56} " )
96
- icp_info = super ().post_tool (self .query_url , '' , self .query_text , self .base_header ).json ()['params' ]
96
+ try :
97
+ icp_info = super ().post_tool (self .query_url , '' , self .query_text , self .base_header ).json ()['params' ]
98
+ except :
99
+ print (f"{ ' 查询出错,请重试 ' :-^51} \n " )
100
+ return - 1
97
101
total_domains = icp_info ['total' ]
98
102
total_pages = icp_info ['lastPage' ]
99
103
end_row = icp_info ['endRow' ]
@@ -124,7 +128,11 @@ def query_information(self):
124
128
if icp_info ['isLastPage' ] is True :
125
129
break
126
130
else :
127
- icp_info = super ().post_tool (self .query_url , '' , self .query_text , self .base_header ).json ()['params' ]
131
+ try :
132
+ icp_info = super ().post_tool (self .query_url , '' , self .query_text , self .base_header ).json ()['params' ]
133
+ except :
134
+ print (f"{ ' 查询出错,请重试 ' :-^51} \n " )
135
+ return - 1
128
136
end_row = icp_info ['endRow' ]
129
137
sleep (3 ) # 翻页需要慢一点,否则大概率被WAF拦截
130
138
@@ -182,19 +190,21 @@ def write_data(self):
182
190
try :
183
191
self .work_book .save (self .excel_file_path )
184
192
except PermissionError :
185
- return print ("** 备案信息登记表格已打开,无法写入文件。如需写入,请关闭文件后重新执行! **\n " )
193
+ print ("** 备案信息登记表格已打开,请关闭后按任意键执行录入! **\n " )
194
+ os .system ('pause' )
195
+ self .set_format ()
186
196
return print (f"{ ' 查询结果保存在:' + str (self .excel_file_path ) + ' ' :*^47} \n " )
187
197
188
198
if __name__ == '__main__' :
189
199
"""
190
- 各类可预期的报错,返回为-1
200
+ 各类可预期的报错,返回为 -1
191
201
"""
192
202
os .environ ['no_proxy' ] = '*'
193
203
query_target = query_info ()
194
- requirement_info = get_require_info ()
204
+ requirement_info = get_required_info ()
195
205
save_data = excel_tool ()
196
206
print (f"\n { ' 项目地址:https://github.com/wongzeon/ICP-Checker ' :-^54} \n " )
197
- print (f"{ ' V2.2.0 2023/11/23 仅用于学习研究,不得用于商业/非法用途 ' :-^41} " )
207
+ print (f"{ ' V2.2.1 2023/11/23 仅用于学习研究,不得用于商业/非法用途 ' :-^41} " )
198
208
requirement_info .get_cookie ()
199
209
token = requirement_info .get_token ()
200
210
exe_num = 0
0 commit comments