re-common 10.0.39__py3-none-any.whl → 10.0.41__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +235 -220
- re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
- re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
- re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
- re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
- re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/concurrency.py +35 -35
- re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
- re_common/v2/baselibrary/tools/data_processer/data_processer.py +497 -508
- re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
- re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
- re_common/v2/baselibrary/tools/dict_tools.py +44 -44
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
- re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
- re_common/v2/baselibrary/tools/list_tools.py +69 -69
- re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/tree_processor/__init__.py +0 -0
- re_common/v2/baselibrary/tools/tree_processor/builder.py +25 -0
- re_common/v2/baselibrary/tools/tree_processor/node.py +13 -0
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
- re_common/v2/baselibrary/utils/author_smi.py +361 -361
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +163 -163
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +94 -77
- re_common/v2/baselibrary/utils/db.py +174 -156
- re_common/v2/baselibrary/utils/elasticsearch.py +46 -0
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +187 -186
- re_common/v2/baselibrary/utils/string_clear.py +246 -246
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +312 -271
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/LICENSE +201 -201
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/METADATA +16 -16
- re_common-10.0.41.dist-info/RECORD +252 -0
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/WHEEL +1 -1
- re_common-10.0.39.dist-info/RECORD +0 -248
- {re_common-10.0.39.dist-info → re_common-10.0.41.dist-info}/top_level.txt +0 -0
|
@@ -1,412 +1,412 @@
|
|
|
1
|
-
import json
|
|
2
|
-
|
|
3
|
-
from re_common.baselibrary.utils.core.requests_core import MsgCode
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class MRequest(object):
|
|
7
|
-
POST = "post"
|
|
8
|
-
GET = "get"
|
|
9
|
-
|
|
10
|
-
def __init__(self, logger=None):
|
|
11
|
-
if logger is None:
|
|
12
|
-
from re_common.baselibrary import MLogger
|
|
13
|
-
logger = MLogger().streamlogger
|
|
14
|
-
self.logger = logger
|
|
15
|
-
self.html = None
|
|
16
|
-
self.html_bytes = None
|
|
17
|
-
self.resp = None
|
|
18
|
-
self.marks = []
|
|
19
|
-
self.middler_list = [self.is_null_html_middlerwares, self.status_code_middlerwares, self.end_middlerwares,
|
|
20
|
-
self.marks_middlerwares]
|
|
21
|
-
self.status_code = None
|
|
22
|
-
self.header = None
|
|
23
|
-
self.refer = None
|
|
24
|
-
self.proxy = None
|
|
25
|
-
self.url = None
|
|
26
|
-
self.params = None
|
|
27
|
-
self.data = None
|
|
28
|
-
self.cookies = None
|
|
29
|
-
self.sn = None
|
|
30
|
-
self.files = None
|
|
31
|
-
self.auth = None
|
|
32
|
-
self.timeout = None
|
|
33
|
-
self.allow_redirects = True
|
|
34
|
-
self.hooks = None
|
|
35
|
-
self.stream = None
|
|
36
|
-
self.verify = None
|
|
37
|
-
self.cert = None
|
|
38
|
-
self.json = None
|
|
39
|
-
self.resp_encoding = None
|
|
40
|
-
self.resp_errors = "strict"
|
|
41
|
-
self.resp_dicts = {"code": self.status_code, "msg": ""}
|
|
42
|
-
self.allow_resp_text = True
|
|
43
|
-
self.allow_resp_bytes = False
|
|
44
|
-
self.middler_para = {}
|
|
45
|
-
self.skip_auto_headers = None
|
|
46
|
-
self.force_close = None # "true" or "false"
|
|
47
|
-
|
|
48
|
-
def set_force_close(self, true_or_false):
|
|
49
|
-
self.force_close = true_or_false
|
|
50
|
-
|
|
51
|
-
def set_skip_auto_headers(self, lists):
|
|
52
|
-
"""
|
|
53
|
-
设置skip_auto_headers的参数
|
|
54
|
-
skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
55
|
-
:return:
|
|
56
|
-
"""
|
|
57
|
-
self.skip_auto_headers = lists
|
|
58
|
-
return self
|
|
59
|
-
|
|
60
|
-
def set_middler_para(self, dicts):
|
|
61
|
-
"""
|
|
62
|
-
设置middler的参数
|
|
63
|
-
def status_code_middlerwares(self, status_code=200):
|
|
64
|
-
可以设置
|
|
65
|
-
dicts = {”status_code_middlerwares“:{"status_code":200}}
|
|
66
|
-
:return:
|
|
67
|
-
"""
|
|
68
|
-
self.middler_para = dicts
|
|
69
|
-
|
|
70
|
-
def set_allow_redirects(self, flag=True):
|
|
71
|
-
"""
|
|
72
|
-
设置是否允许重定向
|
|
73
|
-
:param flag:
|
|
74
|
-
:return:
|
|
75
|
-
"""
|
|
76
|
-
self.allow_redirects = flag
|
|
77
|
-
return self
|
|
78
|
-
|
|
79
|
-
def set_allow_resp_text(self, flag=True):
|
|
80
|
-
"""
|
|
81
|
-
设置是否返回response内容
|
|
82
|
-
解决重定向设置为false时内容无法解析导致编码错误
|
|
83
|
-
:param flag:
|
|
84
|
-
:return:
|
|
85
|
-
"""
|
|
86
|
-
self.allow_resp_text = flag
|
|
87
|
-
return self
|
|
88
|
-
|
|
89
|
-
def set_allow_resp_bytes(self, flag=True):
|
|
90
|
-
"""
|
|
91
|
-
设置是否返回response内容的字节信息,grpc可以用到
|
|
92
|
-
:param flag:
|
|
93
|
-
:return:
|
|
94
|
-
"""
|
|
95
|
-
self.allow_resp_bytes = flag
|
|
96
|
-
return self
|
|
97
|
-
|
|
98
|
-
def set_resp_errors(self, errors):
|
|
99
|
-
"""
|
|
100
|
-
设置结果是否忽略乱码错误 可以设置为 ignore
|
|
101
|
-
errors 为 decode 的属性 errors=errors
|
|
102
|
-
:param errors:
|
|
103
|
-
:return:
|
|
104
|
-
"""
|
|
105
|
-
self.resp_errors = errors
|
|
106
|
-
return self
|
|
107
|
-
|
|
108
|
-
def set_resp_encoding(self, encode):
|
|
109
|
-
"""
|
|
110
|
-
设置结果编码
|
|
111
|
-
:param encode:
|
|
112
|
-
:return:
|
|
113
|
-
"""
|
|
114
|
-
self.resp_encoding = encode
|
|
115
|
-
return self
|
|
116
|
-
|
|
117
|
-
def set_html(self, html):
|
|
118
|
-
"""
|
|
119
|
-
设置html
|
|
120
|
-
:param html:
|
|
121
|
-
:return:
|
|
122
|
-
"""
|
|
123
|
-
self.html = html
|
|
124
|
-
return self
|
|
125
|
-
|
|
126
|
-
def set_status_code(self, status_code):
|
|
127
|
-
"""
|
|
128
|
-
设置状态码
|
|
129
|
-
:param status_code:
|
|
130
|
-
:return:
|
|
131
|
-
"""
|
|
132
|
-
self.status_code = status_code
|
|
133
|
-
self.resp_dicts["code"] = self.status_code
|
|
134
|
-
return self
|
|
135
|
-
|
|
136
|
-
def set_middler_list(self, lists):
|
|
137
|
-
"""
|
|
138
|
-
设置需要验证的步骤
|
|
139
|
-
:param lists:
|
|
140
|
-
:return:
|
|
141
|
-
"""
|
|
142
|
-
if lists is not None:
|
|
143
|
-
self.middler_list = lists
|
|
144
|
-
return self
|
|
145
|
-
|
|
146
|
-
def set_marks(self, marks: list):
|
|
147
|
-
"""
|
|
148
|
-
设置验证码
|
|
149
|
-
:param marks:
|
|
150
|
-
:return:
|
|
151
|
-
"""
|
|
152
|
-
self.marks = marks
|
|
153
|
-
return self
|
|
154
|
-
|
|
155
|
-
def set_timeout(self, timeout):
|
|
156
|
-
"""
|
|
157
|
-
设置超时
|
|
158
|
-
:param timeout:
|
|
159
|
-
:return:
|
|
160
|
-
"""
|
|
161
|
-
self.timeout = timeout
|
|
162
|
-
return self
|
|
163
|
-
|
|
164
|
-
def set_header(self, header):
|
|
165
|
-
"""
|
|
166
|
-
设置header
|
|
167
|
-
:return:
|
|
168
|
-
"""
|
|
169
|
-
self.header = header
|
|
170
|
-
return self
|
|
171
|
-
|
|
172
|
-
def set_refer(self, refer):
|
|
173
|
-
"""
|
|
174
|
-
设置header中的refer,每次请求有可能变化
|
|
175
|
-
:return:
|
|
176
|
-
"""
|
|
177
|
-
self.refer = refer
|
|
178
|
-
return self
|
|
179
|
-
|
|
180
|
-
def set_proxy(self, proxy):
|
|
181
|
-
"""
|
|
182
|
-
设置代理
|
|
183
|
-
:return:
|
|
184
|
-
"""
|
|
185
|
-
self.proxy = proxy
|
|
186
|
-
return self
|
|
187
|
-
|
|
188
|
-
def set_url(self, url):
|
|
189
|
-
"""
|
|
190
|
-
设置请求的url
|
|
191
|
-
:return:
|
|
192
|
-
"""
|
|
193
|
-
self.url = url
|
|
194
|
-
return self
|
|
195
|
-
|
|
196
|
-
def set_params(self, params):
|
|
197
|
-
"""
|
|
198
|
-
get 请求参数
|
|
199
|
-
:return:
|
|
200
|
-
"""
|
|
201
|
-
self.params = params
|
|
202
|
-
return self
|
|
203
|
-
|
|
204
|
-
def set_data(self, data):
|
|
205
|
-
"""
|
|
206
|
-
设置请求参数
|
|
207
|
-
:return:
|
|
208
|
-
"""
|
|
209
|
-
self.data = data
|
|
210
|
-
return self
|
|
211
|
-
|
|
212
|
-
def set_cookies(self, cookies):
|
|
213
|
-
"""
|
|
214
|
-
设置cookie
|
|
215
|
-
:return:
|
|
216
|
-
"""
|
|
217
|
-
self.cookies = cookies
|
|
218
|
-
return self
|
|
219
|
-
|
|
220
|
-
def set_sn(self, sn):
|
|
221
|
-
"""
|
|
222
|
-
设置会话
|
|
223
|
-
:return:
|
|
224
|
-
"""
|
|
225
|
-
self.sn = sn
|
|
226
|
-
return self
|
|
227
|
-
|
|
228
|
-
def close_sn(self):
|
|
229
|
-
"""
|
|
230
|
-
关闭会话
|
|
231
|
-
:return:
|
|
232
|
-
"""
|
|
233
|
-
if self.sn is not None:
|
|
234
|
-
self.sn.close()
|
|
235
|
-
|
|
236
|
-
def builder(self):
|
|
237
|
-
"""
|
|
238
|
-
建造成需要的对象用于接下来请求使用
|
|
239
|
-
:return:
|
|
240
|
-
"""
|
|
241
|
-
if self.refer != "":
|
|
242
|
-
self.header["refer"] = self.refer
|
|
243
|
-
|
|
244
|
-
def get(self):
|
|
245
|
-
"""
|
|
246
|
-
get 请求
|
|
247
|
-
:return:
|
|
248
|
-
"""
|
|
249
|
-
pass
|
|
250
|
-
|
|
251
|
-
def post(self):
|
|
252
|
-
"""
|
|
253
|
-
post 请求
|
|
254
|
-
:return:
|
|
255
|
-
"""
|
|
256
|
-
|
|
257
|
-
def on_request_start(self):
|
|
258
|
-
"""
|
|
259
|
-
请求前的钩子函数
|
|
260
|
-
:return:
|
|
261
|
-
"""
|
|
262
|
-
|
|
263
|
-
def on_request_end(self):
|
|
264
|
-
"""
|
|
265
|
-
请求结束的钩子函数
|
|
266
|
-
:return:
|
|
267
|
-
"""
|
|
268
|
-
|
|
269
|
-
def status_code_middlerwares(self, status_code=200):
|
|
270
|
-
"""
|
|
271
|
-
验证返回码
|
|
272
|
-
:return:
|
|
273
|
-
"""
|
|
274
|
-
if "status_code_middlerwares" in self.middler_para.keys():
|
|
275
|
-
if "status_code" in self.middler_para["status_code_middlerwares"].keys():
|
|
276
|
-
status_code = self.middler_para["status_code_middlerwares"]["status_code"]
|
|
277
|
-
if self.status_code != status_code:
|
|
278
|
-
self.resp_dicts["code"] = self.status_code
|
|
279
|
-
self.resp_dicts["msg"] = "status_code err {},{}".format(self.status_code,self.url)
|
|
280
|
-
return False, self.resp_dicts
|
|
281
|
-
return True, self.resp_dicts
|
|
282
|
-
|
|
283
|
-
def end_middlerwares(self, endstring="</html>"):
|
|
284
|
-
"""
|
|
285
|
-
必须以什么结束
|
|
286
|
-
:return:
|
|
287
|
-
"""
|
|
288
|
-
if "end_middlerwares" in self.middler_para.keys():
|
|
289
|
-
if "endstring" in self.middler_para["end_middlerwares"].keys():
|
|
290
|
-
endstring = self.middler_para["end_middlerwares"]["endstring"]
|
|
291
|
-
if not self.html.endswith(endstring):
|
|
292
|
-
self.resp_dicts["code"] = MsgCode.END_STRING_ERROR
|
|
293
|
-
self.resp_dicts["msg"] = "not endswith {},{}".format(endstring,self.url)
|
|
294
|
-
return False, self.resp_dicts
|
|
295
|
-
return True, self.resp_dicts
|
|
296
|
-
|
|
297
|
-
def is_none_html_middlerwares(self):
|
|
298
|
-
"""
|
|
299
|
-
空的html 在使用某些代理时 如果https 写成了http,会有这种情况
|
|
300
|
-
建议所有http的网站使用这个验证器以监控网站何时变成http
|
|
301
|
-
:return:
|
|
302
|
-
"""
|
|
303
|
-
if self.html is not None:
|
|
304
|
-
if len(self.html) == 0:
|
|
305
|
-
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
306
|
-
self.resp_dicts["msg"] = "空的html"
|
|
307
|
-
return False, self.resp_dicts
|
|
308
|
-
else:
|
|
309
|
-
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
310
|
-
self.resp_dicts["msg"] = "空的html"
|
|
311
|
-
return False, self.resp_dicts
|
|
312
|
-
return True, self.resp_dicts
|
|
313
|
-
|
|
314
|
-
def is_null_html_middlerwares(self):
|
|
315
|
-
"""
|
|
316
|
-
api 如果忘记return 会返回 null 字符串
|
|
317
|
-
:return:
|
|
318
|
-
"""
|
|
319
|
-
if self.html == "null":
|
|
320
|
-
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
321
|
-
self.resp_dicts["msg"] = "api没有return导致返回 null"
|
|
322
|
-
return False, self.resp_dicts
|
|
323
|
-
return True, self.resp_dicts
|
|
324
|
-
|
|
325
|
-
def have_end_middlerwares(self, havestring="</html>"):
|
|
326
|
-
if "have_end_middlerwares" in self.middler_para.keys():
|
|
327
|
-
if "havestring" in self.middler_para["have_end_middlerwares"].keys():
|
|
328
|
-
havestring = self.middler_para["have_end_middlerwares"]["havestring"]
|
|
329
|
-
|
|
330
|
-
if self.html.find(havestring) == -1:
|
|
331
|
-
self.resp_dicts["code"] = MsgCode.END_STRING_ERROR
|
|
332
|
-
self.resp_dicts["msg"] = "not have endswith {}".format(havestring)
|
|
333
|
-
return False, self.resp_dicts
|
|
334
|
-
return True, self.resp_dicts
|
|
335
|
-
|
|
336
|
-
def marks_middlerwares(self):
|
|
337
|
-
"""
|
|
338
|
-
建议至少两个,
|
|
339
|
-
一个是id 防止因为cookie请求到其他的页面
|
|
340
|
-
一个为验证该html关键词,用于改版预测
|
|
341
|
-
:param marks: 一个列表
|
|
342
|
-
:return:
|
|
343
|
-
"""
|
|
344
|
-
mark_str = ""
|
|
345
|
-
for mark in self.marks:
|
|
346
|
-
if self.html.find(mark) == -1:
|
|
347
|
-
mark_str = mark_str + mark + ";"
|
|
348
|
-
|
|
349
|
-
if mark_str != "":
|
|
350
|
-
self.resp_dicts["code"] = MsgCode.MARK_ERROR
|
|
351
|
-
self.resp_dicts["msg"] = "mark Feature err: {}".format(mark_str)
|
|
352
|
-
return False, self.resp_dicts
|
|
353
|
-
else:
|
|
354
|
-
return True, self.resp_dicts
|
|
355
|
-
|
|
356
|
-
def is_json_middlerwares(self):
|
|
357
|
-
"""
|
|
358
|
-
验证返回结果是否是json
|
|
359
|
-
:return:
|
|
360
|
-
"""
|
|
361
|
-
try:
|
|
362
|
-
dic = json.loads(self.html)
|
|
363
|
-
except Exception as e:
|
|
364
|
-
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
365
|
-
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
366
|
-
return False, self.resp_dicts
|
|
367
|
-
return True, self.resp_dicts
|
|
368
|
-
|
|
369
|
-
def fail_middlerwares(self):
|
|
370
|
-
"""
|
|
371
|
-
当请求失败时,返回错误信息
|
|
372
|
-
废弃这个方法 请使用msg_status_code_middlerwares
|
|
373
|
-
:return:
|
|
374
|
-
"""
|
|
375
|
-
try:
|
|
376
|
-
dic = json.loads(self.html)
|
|
377
|
-
if dic["status"] == "SUCCESS":
|
|
378
|
-
return True, self.resp_dicts
|
|
379
|
-
else:
|
|
380
|
-
self.resp_dicts["code"] = MsgCode.STATUS_ERROR
|
|
381
|
-
self.resp_dicts["msg"] = "Status error"
|
|
382
|
-
return False, self.resp_dicts
|
|
383
|
-
except Exception as e:
|
|
384
|
-
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
385
|
-
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
386
|
-
return False, self.resp_dicts
|
|
387
|
-
|
|
388
|
-
def msg_status_code_middlerwares(self, status=["SUCCESS"], msg_code=[200]):
|
|
389
|
-
"""
|
|
390
|
-
status 和 msg_code 错误拦截
|
|
391
|
-
:return:
|
|
392
|
-
"""
|
|
393
|
-
if "msg_status_code_middlerwares" in self.middler_para.keys():
|
|
394
|
-
if "status" in self.middler_para["msg_status_code_middlerwares"].keys():
|
|
395
|
-
status = self.middler_para["msg_status_code_middlerwares"]["status"]
|
|
396
|
-
if "msg_code" in self.middler_para["msg_status_code_middlerwares"].keys():
|
|
397
|
-
msg_code = self.middler_para["msg_status_code_middlerwares"]["msg_code"]
|
|
398
|
-
try:
|
|
399
|
-
dic = json.loads(self.html)
|
|
400
|
-
if dic["status"] not in status:
|
|
401
|
-
self.resp_dicts["code"] = MsgCode.STATUS_ERROR
|
|
402
|
-
self.resp_dicts["msg"] = "error, {}".format(self.html)
|
|
403
|
-
return False, self.resp_dicts
|
|
404
|
-
if dic["msg_code"] not in msg_code:
|
|
405
|
-
self.resp_dicts["code"] = MsgCode.CODE_ERROR
|
|
406
|
-
self.resp_dicts["msg"] = "error data code, {}".format(dic["msg_code"])
|
|
407
|
-
return False, self.resp_dicts
|
|
408
|
-
except Exception as e:
|
|
409
|
-
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
410
|
-
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
411
|
-
return False, self.resp_dicts
|
|
412
|
-
return True, self.resp_dicts
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
from re_common.baselibrary.utils.core.requests_core import MsgCode
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MRequest(object):
|
|
7
|
+
POST = "post"
|
|
8
|
+
GET = "get"
|
|
9
|
+
|
|
10
|
+
def __init__(self, logger=None):
|
|
11
|
+
if logger is None:
|
|
12
|
+
from re_common.baselibrary import MLogger
|
|
13
|
+
logger = MLogger().streamlogger
|
|
14
|
+
self.logger = logger
|
|
15
|
+
self.html = None
|
|
16
|
+
self.html_bytes = None
|
|
17
|
+
self.resp = None
|
|
18
|
+
self.marks = []
|
|
19
|
+
self.middler_list = [self.is_null_html_middlerwares, self.status_code_middlerwares, self.end_middlerwares,
|
|
20
|
+
self.marks_middlerwares]
|
|
21
|
+
self.status_code = None
|
|
22
|
+
self.header = None
|
|
23
|
+
self.refer = None
|
|
24
|
+
self.proxy = None
|
|
25
|
+
self.url = None
|
|
26
|
+
self.params = None
|
|
27
|
+
self.data = None
|
|
28
|
+
self.cookies = None
|
|
29
|
+
self.sn = None
|
|
30
|
+
self.files = None
|
|
31
|
+
self.auth = None
|
|
32
|
+
self.timeout = None
|
|
33
|
+
self.allow_redirects = True
|
|
34
|
+
self.hooks = None
|
|
35
|
+
self.stream = None
|
|
36
|
+
self.verify = None
|
|
37
|
+
self.cert = None
|
|
38
|
+
self.json = None
|
|
39
|
+
self.resp_encoding = None
|
|
40
|
+
self.resp_errors = "strict"
|
|
41
|
+
self.resp_dicts = {"code": self.status_code, "msg": ""}
|
|
42
|
+
self.allow_resp_text = True
|
|
43
|
+
self.allow_resp_bytes = False
|
|
44
|
+
self.middler_para = {}
|
|
45
|
+
self.skip_auto_headers = None
|
|
46
|
+
self.force_close = None # "true" or "false"
|
|
47
|
+
|
|
48
|
+
def set_force_close(self, true_or_false):
|
|
49
|
+
self.force_close = true_or_false
|
|
50
|
+
|
|
51
|
+
def set_skip_auto_headers(self, lists):
|
|
52
|
+
"""
|
|
53
|
+
设置skip_auto_headers的参数
|
|
54
|
+
skip_auto_headers 用法: 不对列表内的对应参数进行自动生成
|
|
55
|
+
:return:
|
|
56
|
+
"""
|
|
57
|
+
self.skip_auto_headers = lists
|
|
58
|
+
return self
|
|
59
|
+
|
|
60
|
+
def set_middler_para(self, dicts):
|
|
61
|
+
"""
|
|
62
|
+
设置middler的参数
|
|
63
|
+
def status_code_middlerwares(self, status_code=200):
|
|
64
|
+
可以设置
|
|
65
|
+
dicts = {”status_code_middlerwares“:{"status_code":200}}
|
|
66
|
+
:return:
|
|
67
|
+
"""
|
|
68
|
+
self.middler_para = dicts
|
|
69
|
+
|
|
70
|
+
def set_allow_redirects(self, flag=True):
|
|
71
|
+
"""
|
|
72
|
+
设置是否允许重定向
|
|
73
|
+
:param flag:
|
|
74
|
+
:return:
|
|
75
|
+
"""
|
|
76
|
+
self.allow_redirects = flag
|
|
77
|
+
return self
|
|
78
|
+
|
|
79
|
+
def set_allow_resp_text(self, flag=True):
|
|
80
|
+
"""
|
|
81
|
+
设置是否返回response内容
|
|
82
|
+
解决重定向设置为false时内容无法解析导致编码错误
|
|
83
|
+
:param flag:
|
|
84
|
+
:return:
|
|
85
|
+
"""
|
|
86
|
+
self.allow_resp_text = flag
|
|
87
|
+
return self
|
|
88
|
+
|
|
89
|
+
def set_allow_resp_bytes(self, flag=True):
|
|
90
|
+
"""
|
|
91
|
+
设置是否返回response内容的字节信息,grpc可以用到
|
|
92
|
+
:param flag:
|
|
93
|
+
:return:
|
|
94
|
+
"""
|
|
95
|
+
self.allow_resp_bytes = flag
|
|
96
|
+
return self
|
|
97
|
+
|
|
98
|
+
def set_resp_errors(self, errors):
|
|
99
|
+
"""
|
|
100
|
+
设置结果是否忽略乱码错误 可以设置为 ignore
|
|
101
|
+
errors 为 decode 的属性 errors=errors
|
|
102
|
+
:param errors:
|
|
103
|
+
:return:
|
|
104
|
+
"""
|
|
105
|
+
self.resp_errors = errors
|
|
106
|
+
return self
|
|
107
|
+
|
|
108
|
+
def set_resp_encoding(self, encode):
|
|
109
|
+
"""
|
|
110
|
+
设置结果编码
|
|
111
|
+
:param encode:
|
|
112
|
+
:return:
|
|
113
|
+
"""
|
|
114
|
+
self.resp_encoding = encode
|
|
115
|
+
return self
|
|
116
|
+
|
|
117
|
+
def set_html(self, html):
|
|
118
|
+
"""
|
|
119
|
+
设置html
|
|
120
|
+
:param html:
|
|
121
|
+
:return:
|
|
122
|
+
"""
|
|
123
|
+
self.html = html
|
|
124
|
+
return self
|
|
125
|
+
|
|
126
|
+
def set_status_code(self, status_code):
|
|
127
|
+
"""
|
|
128
|
+
设置状态码
|
|
129
|
+
:param status_code:
|
|
130
|
+
:return:
|
|
131
|
+
"""
|
|
132
|
+
self.status_code = status_code
|
|
133
|
+
self.resp_dicts["code"] = self.status_code
|
|
134
|
+
return self
|
|
135
|
+
|
|
136
|
+
def set_middler_list(self, lists):
|
|
137
|
+
"""
|
|
138
|
+
设置需要验证的步骤
|
|
139
|
+
:param lists:
|
|
140
|
+
:return:
|
|
141
|
+
"""
|
|
142
|
+
if lists is not None:
|
|
143
|
+
self.middler_list = lists
|
|
144
|
+
return self
|
|
145
|
+
|
|
146
|
+
def set_marks(self, marks: list):
|
|
147
|
+
"""
|
|
148
|
+
设置验证码
|
|
149
|
+
:param marks:
|
|
150
|
+
:return:
|
|
151
|
+
"""
|
|
152
|
+
self.marks = marks
|
|
153
|
+
return self
|
|
154
|
+
|
|
155
|
+
def set_timeout(self, timeout):
|
|
156
|
+
"""
|
|
157
|
+
设置超时
|
|
158
|
+
:param timeout:
|
|
159
|
+
:return:
|
|
160
|
+
"""
|
|
161
|
+
self.timeout = timeout
|
|
162
|
+
return self
|
|
163
|
+
|
|
164
|
+
def set_header(self, header):
|
|
165
|
+
"""
|
|
166
|
+
设置header
|
|
167
|
+
:return:
|
|
168
|
+
"""
|
|
169
|
+
self.header = header
|
|
170
|
+
return self
|
|
171
|
+
|
|
172
|
+
def set_refer(self, refer):
|
|
173
|
+
"""
|
|
174
|
+
设置header中的refer,每次请求有可能变化
|
|
175
|
+
:return:
|
|
176
|
+
"""
|
|
177
|
+
self.refer = refer
|
|
178
|
+
return self
|
|
179
|
+
|
|
180
|
+
def set_proxy(self, proxy):
|
|
181
|
+
"""
|
|
182
|
+
设置代理
|
|
183
|
+
:return:
|
|
184
|
+
"""
|
|
185
|
+
self.proxy = proxy
|
|
186
|
+
return self
|
|
187
|
+
|
|
188
|
+
def set_url(self, url):
|
|
189
|
+
"""
|
|
190
|
+
设置请求的url
|
|
191
|
+
:return:
|
|
192
|
+
"""
|
|
193
|
+
self.url = url
|
|
194
|
+
return self
|
|
195
|
+
|
|
196
|
+
def set_params(self, params):
|
|
197
|
+
"""
|
|
198
|
+
get 请求参数
|
|
199
|
+
:return:
|
|
200
|
+
"""
|
|
201
|
+
self.params = params
|
|
202
|
+
return self
|
|
203
|
+
|
|
204
|
+
def set_data(self, data):
|
|
205
|
+
"""
|
|
206
|
+
设置请求参数
|
|
207
|
+
:return:
|
|
208
|
+
"""
|
|
209
|
+
self.data = data
|
|
210
|
+
return self
|
|
211
|
+
|
|
212
|
+
def set_cookies(self, cookies):
|
|
213
|
+
"""
|
|
214
|
+
设置cookie
|
|
215
|
+
:return:
|
|
216
|
+
"""
|
|
217
|
+
self.cookies = cookies
|
|
218
|
+
return self
|
|
219
|
+
|
|
220
|
+
def set_sn(self, sn):
|
|
221
|
+
"""
|
|
222
|
+
设置会话
|
|
223
|
+
:return:
|
|
224
|
+
"""
|
|
225
|
+
self.sn = sn
|
|
226
|
+
return self
|
|
227
|
+
|
|
228
|
+
def close_sn(self):
|
|
229
|
+
"""
|
|
230
|
+
关闭会话
|
|
231
|
+
:return:
|
|
232
|
+
"""
|
|
233
|
+
if self.sn is not None:
|
|
234
|
+
self.sn.close()
|
|
235
|
+
|
|
236
|
+
def builder(self):
|
|
237
|
+
"""
|
|
238
|
+
建造成需要的对象用于接下来请求使用
|
|
239
|
+
:return:
|
|
240
|
+
"""
|
|
241
|
+
if self.refer != "":
|
|
242
|
+
self.header["refer"] = self.refer
|
|
243
|
+
|
|
244
|
+
def get(self):
|
|
245
|
+
"""
|
|
246
|
+
get 请求
|
|
247
|
+
:return:
|
|
248
|
+
"""
|
|
249
|
+
pass
|
|
250
|
+
|
|
251
|
+
def post(self):
|
|
252
|
+
"""
|
|
253
|
+
post 请求
|
|
254
|
+
:return:
|
|
255
|
+
"""
|
|
256
|
+
|
|
257
|
+
def on_request_start(self):
|
|
258
|
+
"""
|
|
259
|
+
请求前的钩子函数
|
|
260
|
+
:return:
|
|
261
|
+
"""
|
|
262
|
+
|
|
263
|
+
def on_request_end(self):
|
|
264
|
+
"""
|
|
265
|
+
请求结束的钩子函数
|
|
266
|
+
:return:
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
def status_code_middlerwares(self, status_code=200):
|
|
270
|
+
"""
|
|
271
|
+
验证返回码
|
|
272
|
+
:return:
|
|
273
|
+
"""
|
|
274
|
+
if "status_code_middlerwares" in self.middler_para.keys():
|
|
275
|
+
if "status_code" in self.middler_para["status_code_middlerwares"].keys():
|
|
276
|
+
status_code = self.middler_para["status_code_middlerwares"]["status_code"]
|
|
277
|
+
if self.status_code != status_code:
|
|
278
|
+
self.resp_dicts["code"] = self.status_code
|
|
279
|
+
self.resp_dicts["msg"] = "status_code err {},{}".format(self.status_code,self.url)
|
|
280
|
+
return False, self.resp_dicts
|
|
281
|
+
return True, self.resp_dicts
|
|
282
|
+
|
|
283
|
+
def end_middlerwares(self, endstring="</html>"):
|
|
284
|
+
"""
|
|
285
|
+
必须以什么结束
|
|
286
|
+
:return:
|
|
287
|
+
"""
|
|
288
|
+
if "end_middlerwares" in self.middler_para.keys():
|
|
289
|
+
if "endstring" in self.middler_para["end_middlerwares"].keys():
|
|
290
|
+
endstring = self.middler_para["end_middlerwares"]["endstring"]
|
|
291
|
+
if not self.html.endswith(endstring):
|
|
292
|
+
self.resp_dicts["code"] = MsgCode.END_STRING_ERROR
|
|
293
|
+
self.resp_dicts["msg"] = "not endswith {},{}".format(endstring,self.url)
|
|
294
|
+
return False, self.resp_dicts
|
|
295
|
+
return True, self.resp_dicts
|
|
296
|
+
|
|
297
|
+
def is_none_html_middlerwares(self):
|
|
298
|
+
"""
|
|
299
|
+
空的html 在使用某些代理时 如果https 写成了http,会有这种情况
|
|
300
|
+
建议所有http的网站使用这个验证器以监控网站何时变成http
|
|
301
|
+
:return:
|
|
302
|
+
"""
|
|
303
|
+
if self.html is not None:
|
|
304
|
+
if len(self.html) == 0:
|
|
305
|
+
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
306
|
+
self.resp_dicts["msg"] = "空的html"
|
|
307
|
+
return False, self.resp_dicts
|
|
308
|
+
else:
|
|
309
|
+
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
310
|
+
self.resp_dicts["msg"] = "空的html"
|
|
311
|
+
return False, self.resp_dicts
|
|
312
|
+
return True, self.resp_dicts
|
|
313
|
+
|
|
314
|
+
def is_null_html_middlerwares(self):
|
|
315
|
+
"""
|
|
316
|
+
api 如果忘记return 会返回 null 字符串
|
|
317
|
+
:return:
|
|
318
|
+
"""
|
|
319
|
+
if self.html == "null":
|
|
320
|
+
self.resp_dicts["code"] = MsgCode.NONE_HTML
|
|
321
|
+
self.resp_dicts["msg"] = "api没有return导致返回 null"
|
|
322
|
+
return False, self.resp_dicts
|
|
323
|
+
return True, self.resp_dicts
|
|
324
|
+
|
|
325
|
+
def have_end_middlerwares(self, havestring="</html>"):
|
|
326
|
+
if "have_end_middlerwares" in self.middler_para.keys():
|
|
327
|
+
if "havestring" in self.middler_para["have_end_middlerwares"].keys():
|
|
328
|
+
havestring = self.middler_para["have_end_middlerwares"]["havestring"]
|
|
329
|
+
|
|
330
|
+
if self.html.find(havestring) == -1:
|
|
331
|
+
self.resp_dicts["code"] = MsgCode.END_STRING_ERROR
|
|
332
|
+
self.resp_dicts["msg"] = "not have endswith {}".format(havestring)
|
|
333
|
+
return False, self.resp_dicts
|
|
334
|
+
return True, self.resp_dicts
|
|
335
|
+
|
|
336
|
+
def marks_middlerwares(self):
|
|
337
|
+
"""
|
|
338
|
+
建议至少两个,
|
|
339
|
+
一个是id 防止因为cookie请求到其他的页面
|
|
340
|
+
一个为验证该html关键词,用于改版预测
|
|
341
|
+
:param marks: 一个列表
|
|
342
|
+
:return:
|
|
343
|
+
"""
|
|
344
|
+
mark_str = ""
|
|
345
|
+
for mark in self.marks:
|
|
346
|
+
if self.html.find(mark) == -1:
|
|
347
|
+
mark_str = mark_str + mark + ";"
|
|
348
|
+
|
|
349
|
+
if mark_str != "":
|
|
350
|
+
self.resp_dicts["code"] = MsgCode.MARK_ERROR
|
|
351
|
+
self.resp_dicts["msg"] = "mark Feature err: {}".format(mark_str)
|
|
352
|
+
return False, self.resp_dicts
|
|
353
|
+
else:
|
|
354
|
+
return True, self.resp_dicts
|
|
355
|
+
|
|
356
|
+
def is_json_middlerwares(self):
|
|
357
|
+
"""
|
|
358
|
+
验证返回结果是否是json
|
|
359
|
+
:return:
|
|
360
|
+
"""
|
|
361
|
+
try:
|
|
362
|
+
dic = json.loads(self.html)
|
|
363
|
+
except Exception as e:
|
|
364
|
+
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
365
|
+
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
366
|
+
return False, self.resp_dicts
|
|
367
|
+
return True, self.resp_dicts
|
|
368
|
+
|
|
369
|
+
def fail_middlerwares(self):
|
|
370
|
+
"""
|
|
371
|
+
当请求失败时,返回错误信息
|
|
372
|
+
废弃这个方法 请使用msg_status_code_middlerwares
|
|
373
|
+
:return:
|
|
374
|
+
"""
|
|
375
|
+
try:
|
|
376
|
+
dic = json.loads(self.html)
|
|
377
|
+
if dic["status"] == "SUCCESS":
|
|
378
|
+
return True, self.resp_dicts
|
|
379
|
+
else:
|
|
380
|
+
self.resp_dicts["code"] = MsgCode.STATUS_ERROR
|
|
381
|
+
self.resp_dicts["msg"] = "Status error"
|
|
382
|
+
return False, self.resp_dicts
|
|
383
|
+
except Exception as e:
|
|
384
|
+
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
385
|
+
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
386
|
+
return False, self.resp_dicts
|
|
387
|
+
|
|
388
|
+
def msg_status_code_middlerwares(self, status=["SUCCESS"], msg_code=[200]):
|
|
389
|
+
"""
|
|
390
|
+
status 和 msg_code 错误拦截
|
|
391
|
+
:return:
|
|
392
|
+
"""
|
|
393
|
+
if "msg_status_code_middlerwares" in self.middler_para.keys():
|
|
394
|
+
if "status" in self.middler_para["msg_status_code_middlerwares"].keys():
|
|
395
|
+
status = self.middler_para["msg_status_code_middlerwares"]["status"]
|
|
396
|
+
if "msg_code" in self.middler_para["msg_status_code_middlerwares"].keys():
|
|
397
|
+
msg_code = self.middler_para["msg_status_code_middlerwares"]["msg_code"]
|
|
398
|
+
try:
|
|
399
|
+
dic = json.loads(self.html)
|
|
400
|
+
if dic["status"] not in status:
|
|
401
|
+
self.resp_dicts["code"] = MsgCode.STATUS_ERROR
|
|
402
|
+
self.resp_dicts["msg"] = "error, {}".format(self.html)
|
|
403
|
+
return False, self.resp_dicts
|
|
404
|
+
if dic["msg_code"] not in msg_code:
|
|
405
|
+
self.resp_dicts["code"] = MsgCode.CODE_ERROR
|
|
406
|
+
self.resp_dicts["msg"] = "error data code, {}".format(dic["msg_code"])
|
|
407
|
+
return False, self.resp_dicts
|
|
408
|
+
except Exception as e:
|
|
409
|
+
self.resp_dicts["code"] = MsgCode.NOT_IS_JSON
|
|
410
|
+
self.resp_dicts["msg"] = "not is json error, {}".format(repr(e))
|
|
411
|
+
return False, self.resp_dicts
|
|
412
|
+
return True, self.resp_dicts
|