| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- import json
- import pickle
- import requests
- from tools import loggerKit
- class http_util:
- def __init__(self):
- self.api_domain = None
- @staticmethod
- def __http_get(interface_url, header_data, interface_param):
- """
- :param interface_url: 接口地址
- :param header_data: 请求头文件
- :param interface_param: 接口请求参数
- :return: 字典形式结果
- """
- result = None
- try:
- if interface_url != '':
- req_url = interface_url
- response = requests.get(url=req_url,
- headers=header_data,
- verify=False,
- timeout=40,
- params=interface_param
- )
- if response.status_code == 200:
- response_time = response.elapsed.microseconds / 1000 # 发起请求和响应到达的时间,单位ms
- result = response.text
- if response.status_code == 404:
- result = json.dumps({'接口返回状态': response.status_code}, ensure_ascii=False)
- loggerKit.error(result)
- elif interface_url == '':
- result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
- loggerKit.error(result)
- else:
- result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
- loggerKit.error(result)
- except Exception as e:
- result = json.dumps({'未知错误': e}, ensure_ascii=False)
- loggerKit.error(result)
- return result
- @staticmethod
- def __http_post(interface_url, header_data, interface_param):
- """
- :param interface_url: 接口地址
- :param header_data: 请求头文件
- :param interface_param: 接口请求参数
- :return: 字典形式结果
- """
- print("headers", type(header_data))
- print("interface_param", type(interface_param))
- result = None
- response = None
- try:
- if interface_url != '':
- if 'application/x-www-form-urlencoded' in header_data.get('Content-Type'):
- response = requests.post(url=interface_url,
- headers=header_data, # 字典
- data=interface_param, # 字典
- verify=False,
- timeout=40)
- if 'application/json' in header_data.get('Content-Type'):
- response = requests.post(url=interface_url,
- headers=header_data, # 字典
- json=interface_param, # 字典
- verify=False,
- timeout=40)
- if 'multipart/form-data' in header_data.get('Content-Type'):
- # files = {'file': open('upload.txt', 'rb')}
- response = requests.post(url=interface_url,
- headers=header_data, # 字典
- files=interface_param, # 字典
- verify=False,
- timeout=40)
- if response.status_code == 200:
- response_time = response.elapsed.microseconds / 1000 # 发起请求和响应到达的时间,单位ms
- loggerKit.debug('接口返回结果:%s' % response.text)
- result = response.text
- if response.status_code == 404:
- result = json.dumps({'接口返回状态:%s': response.status_code}, ensure_ascii=False)
- loggerKit.error(result)
- elif interface_url == '':
- result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
- loggerKit.error(result)
- else:
- result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
- loggerKit.error(result)
- except Exception as e:
- result = json.dumps({'未知错误': e}, ensure_ascii=False)
- loggerKit.error(result)
- return result
- @staticmethod
- def __http_put(interface_url, header_data, interface_param):
- """
- :param interface_url: 请求URL
- :param header_data: 请求头参数
- :param interface_param: 请求体参数
- :return:
- """
- result = None
- response = None
- try:
- if 'application/x-www-form-urlencoded' in header_data.get('Content-Type'):
- interface_param = interface_param
- elif 'application/json' in header_data.get('Content-Type'):
- interface_param = json.dumps(interface_param)
- else:
- pass
- print(type(interface_param), interface_param)
- if interface_url != '':
- req_url = interface_url
- response = requests.put(url=req_url,
- headers=header_data,
- data=interface_param,
- verify=False,
- timeout=40)
- if response.status_code == 200:
- result = response.text
- if response.status_code == 404:
- result = json.dumps({'接口返回状态': response.status_code}, ensure_ascii=False)
- elif interface_url == '':
- result = json.dumps({'接口地址参数为空': ''}, ensure_ascii=False)
- loggerKit.error(result)
- else:
- result = json.dumps({'接口地址错误': ''}, ensure_ascii=False)
- loggerKit.error(result)
- except Exception as e:
- result = json.dumps({'未知错误': e}, ensure_ascii=False)
- loggerKit.error(result)
- return result
- @staticmethod
- def set_http_head(header_data):
- """
- 公共设置请求头方法
- 设置http请求头,参数为json格式的字符串:{"Content-Type":“application/json”}
- """
- http_head = None
- if not header_data:
- http_head = {}
- else:
- if isinstance(header_data, dict):
- http_head = header_data
- elif isinstance(header_data, str) and header_data.startswith('{') and header_data.endswith('}'):
- http_head = json.loads(header_data)
- elif isinstance(header_data, bytes):
- http_head = pickle.loads(header_data)
- else:
- pass
- return http_head
- @staticmethod
- def set_http_body(body):
- """
- 公共设置请求体方法
- 设置http请求体,参数为json格式的字符串:{"demo":123}
- """
- http_body = None
- try:
- if isinstance(body, str) and body.startswith('{'):
- http_body = json.loads(body)
- loggerKit.debug('设置请求体成功')
- elif isinstance(body, dict):
- http_body = body
- elif isinstance(body, bytes):
- http_body = pickle.loads(body)
- else:
- pass
- except Exception as e:
- http_body = body
- loggerKit.error('设置请求体失败:%s' % body)
- return http_body
- def set_http_url(self, interface_url):
- """
- 公共设置URL方法
- 设置http请求url,如:http://www.baidu.com
- """
- self.api_domain = "https://www.baidu.com/"
- if not interface_url.startswith('https://') and not interface_url.startswith('http://'):
- http_url = self.api_domain + interface_url
- else:
- http_url = interface_url
- return http_url
- def common_http_request(self, request_type, request_url=None, headers=None, request_data=None, result_type="dict"):
- """
- 发送http请求
- :param request_url:
- :param interface_url: 接口地址
- :param header_data: 请求头文件
- :param interface_param: 接口请求参数
- :param request_type: 请求类型,不区分大小写,GET POST
- :return: 字典形式结果
- """
- result = None
- # if requestUrl is not None:
- http_url = self.set_http_url(request_url)
- # if headers is not None:
- http_head = self.set_http_head(headers)
- if request_data:
- http_body = self.set_http_body(request_data)
- else:
- http_body = {}
- # try:
- if request_type.lower() == 'get':
- result = self.__http_get(http_url,
- http_head,
- http_body)
- loggerKit.debug('用例发送消息URL:%s\n'
- '用例发送消息头:%s\n'
- '用例发送消息体:%s\n'
- % (http_url, http_head, http_body))
- elif request_type.lower() == 'post':
- result = self.__http_post(http_url,
- http_head,
- http_body)
- loggerKit.debug('用例发送消息URL:%s\n'
- '用例发送消息头:%s\n'
- '用例发送消息体:%s\n'
- % (http_url, http_head, http_body))
- elif request_type.lower() == 'put':
- result = self.__http_put(http_url,
- http_head,
- http_body)
- loggerKit.debug('用例发送消息URL:%s\n'
- '用例发送消息头:%s\n'
- '用例发送消息体:%s\n'
- % (http_url, http_head, http_body))
- else:
- loggerKit.error('请求类型错误')
- # except Exception as e:
- # logger.error(e)
- # logger.error('用例发送消息URL:%s\n'
- # '用例发送消息头:%s\n'
- # '用例发送消息体:%s\n'
- # % (http_url, http_head, http_body))
- # return {}
- if result_type == "dict":
- try:
- return pickle.dumps(json.loads(result))
- except Exception:
- return pickle.dumps(result)
- # return json.loads(result)
- else:
- return pickle.dumps(result)
|