http_util.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. import json
  2. import pickle
  3. import requests
  4. from tools import loggerKit
  5. class http_util:
  6. def __init__(self):
  7. self.api_domain = None
  8. @staticmethod
  9. def __http_get(interface_url, header_data, interface_param):
  10. """
  11. :param interface_url: 接口地址
  12. :param header_data: 请求头文件
  13. :param interface_param: 接口请求参数
  14. :return: 字典形式结果
  15. """
  16. result = None
  17. try:
  18. if interface_url != '':
  19. req_url = interface_url
  20. response = requests.get(url=req_url,
  21. headers=header_data,
  22. verify=False,
  23. timeout=40,
  24. params=interface_param
  25. )
  26. if response.status_code == 200:
  27. response_time = response.elapsed.microseconds / 1000 # 发起请求和响应到达的时间,单位ms
  28. result = response.text
  29. if response.status_code == 404:
  30. result = json.dumps({'接口返回状态': response.status_code}, ensure_ascii=False)
  31. loggerKit.error(result)
  32. elif interface_url == '':
  33. result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
  34. loggerKit.error(result)
  35. else:
  36. result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
  37. loggerKit.error(result)
  38. except Exception as e:
  39. result = json.dumps({'未知错误': e}, ensure_ascii=False)
  40. loggerKit.error(result)
  41. return result
  42. @staticmethod
  43. def __http_post(interface_url, header_data, interface_param):
  44. """
  45. :param interface_url: 接口地址
  46. :param header_data: 请求头文件
  47. :param interface_param: 接口请求参数
  48. :return: 字典形式结果
  49. """
  50. print("headers", type(header_data))
  51. print("interface_param", type(interface_param))
  52. result = None
  53. response = None
  54. try:
  55. if interface_url != '':
  56. if 'application/x-www-form-urlencoded' in header_data.get('Content-Type'):
  57. response = requests.post(url=interface_url,
  58. headers=header_data, # 字典
  59. data=interface_param, # 字典
  60. verify=False,
  61. timeout=40)
  62. if 'application/json' in header_data.get('Content-Type'):
  63. response = requests.post(url=interface_url,
  64. headers=header_data, # 字典
  65. json=interface_param, # 字典
  66. verify=False,
  67. timeout=40)
  68. if 'multipart/form-data' in header_data.get('Content-Type'):
  69. # files = {'file': open('upload.txt', 'rb')}
  70. response = requests.post(url=interface_url,
  71. headers=header_data, # 字典
  72. files=interface_param, # 字典
  73. verify=False,
  74. timeout=40)
  75. if response.status_code == 200:
  76. response_time = response.elapsed.microseconds / 1000 # 发起请求和响应到达的时间,单位ms
  77. loggerKit.debug('接口返回结果:%s' % response.text)
  78. result = response.text
  79. if response.status_code == 404:
  80. result = json.dumps({'接口返回状态:%s': response.status_code}, ensure_ascii=False)
  81. loggerKit.error(result)
  82. elif interface_url == '':
  83. result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
  84. loggerKit.error(result)
  85. else:
  86. result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
  87. loggerKit.error(result)
  88. except Exception as e:
  89. result = json.dumps({'未知错误': e}, ensure_ascii=False)
  90. loggerKit.error(result)
  91. return result
  92. @staticmethod
  93. def __http_put(interface_url, header_data, interface_param):
  94. """
  95. :param interface_url: 请求URL
  96. :param header_data: 请求头参数
  97. :param interface_param: 请求体参数
  98. :return:
  99. """
  100. result = None
  101. response = None
  102. try:
  103. if 'application/x-www-form-urlencoded' in header_data.get('Content-Type'):
  104. interface_param = interface_param
  105. elif 'application/json' in header_data.get('Content-Type'):
  106. interface_param = json.dumps(interface_param)
  107. else:
  108. pass
  109. print(type(interface_param), interface_param)
  110. if interface_url != '':
  111. req_url = interface_url
  112. response = requests.put(url=req_url,
  113. headers=header_data,
  114. data=interface_param,
  115. verify=False,
  116. timeout=40)
  117. if response.status_code == 200:
  118. result = response.text
  119. if response.status_code == 404:
  120. result = json.dumps({'接口返回状态': response.status_code}, ensure_ascii=False)
  121. elif interface_url == '':
  122. result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
  123. loggerKit.error(result)
  124. else:
  125. result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
  126. loggerKit.error(result)
  127. except Exception as e:
  128. result = json.dumps({'未知错误': e}, ensure_ascii=False)
  129. loggerKit.error(result)
  130. return result
  131. @staticmethod
  132. def set_http_head(header_data):
  133. """
  134. 公共设置请求头方法
  135. 设置http请求头,参数为json格式的字符串:{"Content-Type":“application/json”}
  136. """
  137. http_head = None
  138. if not header_data:
  139. http_head = {}
  140. else:
  141. if isinstance(header_data, dict):
  142. http_head = header_data
  143. elif isinstance(header_data, str) and header_data.startswith('{') and header_data.endswith('}'):
  144. http_head = json.loads(header_data)
  145. elif isinstance(header_data, bytes):
  146. http_head = pickle.loads(header_data)
  147. else:
  148. pass
  149. return http_head
  150. @staticmethod
  151. def set_http_body(body):
  152. """
  153. 公共设置请求体方法
  154. 设置http请求体,参数为json格式的字符串:{"demo":123}
  155. """
  156. http_body = None
  157. try:
  158. if isinstance(body, str) and body.startswith('{'):
  159. http_body = json.loads(body)
  160. loggerKit.debug('设置请求体成功')
  161. elif isinstance(body, dict):
  162. http_body = body
  163. elif isinstance(body, bytes):
  164. http_body = pickle.loads(body)
  165. else:
  166. pass
  167. except Exception as e:
  168. http_body = body
  169. loggerKit.error('设置请求体失败:%s' % body)
  170. return http_body
  171. def set_http_url(self, interface_url):
  172. """
  173. 公共设置URL方法
  174. 设置http请求url,如:http://www.baidu.com
  175. """
  176. self.api_domain = "https://www.baidu.com/"
  177. if not interface_url.startswith('https://') and not interface_url.startswith('http://'):
  178. http_url = self.api_domain + interface_url
  179. else:
  180. http_url = interface_url
  181. return http_url
  182. def common_http_request(self, request_type, request_url=None, headers=None, request_data=None, result_type="dict"):
  183. """
  184. 发送http请求
  185. :param request_url:
  186. :param interface_url: 接口地址
  187. :param header_data: 请求头文件
  188. :param interface_param: 接口请求参数
  189. :param request_type: 请求类型,不区分大小写,GET POST
  190. :return: 字典形式结果
  191. """
  192. result = None
  193. # if requestUrl is not None:
  194. http_url = self.set_http_url(request_url)
  195. # if headers is not None:
  196. http_head = self.set_http_head(headers)
  197. if request_data:
  198. http_body = self.set_http_body(request_data)
  199. else:
  200. http_body = {}
  201. # try:
  202. if request_type.lower() == 'get':
  203. result = self.__http_get(http_url,
  204. http_head,
  205. http_body)
  206. loggerKit.debug('用例发送消息URL:%s\n'
  207. '用例发送消息头:%s\n'
  208. '用例发送消息体:%s\n'
  209. % (http_url, http_head, http_body))
  210. elif request_type.lower() == 'post':
  211. result = self.__http_post(http_url,
  212. http_head,
  213. http_body)
  214. loggerKit.debug('用例发送消息URL:%s\n'
  215. '用例发送消息头:%s\n'
  216. '用例发送消息体:%s\n'
  217. % (http_url, http_head, http_body))
  218. elif request_type.lower() == 'put':
  219. result = self.__http_put(http_url,
  220. http_head,
  221. http_body)
  222. loggerKit.debug('用例发送消息URL:%s\n'
  223. '用例发送消息头:%s\n'
  224. '用例发送消息体:%s\n'
  225. % (http_url, http_head, http_body))
  226. else:
  227. loggerKit.error('请求类型错误')
  228. # except Exception as e:
  229. # logger.error(e)
  230. # logger.error('用例发送消息URL:%s\n'
  231. # '用例发送消息头:%s\n'
  232. # '用例发送消息体:%s\n'
  233. # % (http_url, http_head, http_body))
  234. # return {}
  235. if result_type == "dict":
  236. try:
  237. return pickle.dumps(json.loads(result))
  238. except Exception:
  239. return pickle.dumps(result)
  240. # return json.loads(result)
  241. else:
  242. return pickle.dumps(result)