re-common 10.0.37__py3-none-any.whl → 10.0.39__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.
Files changed (217) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +219 -219
  145. re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
  146. re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
  147. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
  148. re_common/v2/baselibrary/decorators/utils.py +59 -59
  149. re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
  150. re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
  151. re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
  152. re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
  153. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  154. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
  155. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  156. re_common/v2/baselibrary/tools/concurrency.py +35 -35
  157. re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
  158. re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
  159. re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
  160. re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
  161. re_common/v2/baselibrary/tools/dict_tools.py +44 -44
  162. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  163. re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
  164. re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
  165. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  166. re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
  167. re_common/v2/baselibrary/tools/list_tools.py +69 -69
  168. re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
  169. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  170. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  171. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  172. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  173. re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
  174. re_common/v2/baselibrary/utils/author_smi.py +361 -361
  175. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  176. re_common/v2/baselibrary/utils/basedict.py +37 -37
  177. re_common/v2/baselibrary/utils/basehdfs.py +163 -163
  178. re_common/v2/baselibrary/utils/basepika.py +180 -180
  179. re_common/v2/baselibrary/utils/basetime.py +77 -77
  180. re_common/v2/baselibrary/utils/db.py +156 -156
  181. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  182. re_common/v2/baselibrary/utils/mq.py +83 -83
  183. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  184. re_common/v2/baselibrary/utils/string_bool.py +186 -186
  185. re_common/v2/baselibrary/utils/string_clear.py +246 -246
  186. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  187. re_common/v2/baselibrary/utils/stringutils.py +271 -278
  188. re_common/vip/base_step_process.py +11 -11
  189. re_common/vip/baseencodeid.py +90 -90
  190. re_common/vip/changetaskname.py +28 -28
  191. re_common/vip/core_var.py +24 -24
  192. re_common/vip/mmh3Hash.py +89 -89
  193. re_common/vip/proxy/allproxys.py +127 -127
  194. re_common/vip/proxy/allproxys_thread.py +159 -159
  195. re_common/vip/proxy/cnki_proxy.py +153 -153
  196. re_common/vip/proxy/kuaidaili.py +87 -87
  197. re_common/vip/proxy/proxy_all.py +113 -113
  198. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  199. re_common/vip/proxy/wanfang_proxy.py +152 -152
  200. re_common/vip/proxy/wp_proxy_all.py +181 -181
  201. re_common/vip/read_rawid_to_txt.py +91 -91
  202. re_common/vip/title/__init__.py +5 -5
  203. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  204. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  205. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  206. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  207. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  208. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  209. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  210. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  211. re_common/vip/title/transform/__init__.py +10 -10
  212. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/LICENSE +201 -201
  213. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/METADATA +16 -16
  214. re_common-10.0.39.dist-info/RECORD +248 -0
  215. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/WHEEL +1 -1
  216. re_common-10.0.37.dist-info/RECORD +0 -248
  217. {re_common-10.0.37.dist-info → re_common-10.0.39.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