def requests_get(service_conf, service_name, api_path, timeout=5, retry_times=3): """ service_conf: 服务配置 :param service_conf: :param api_path: :param args: :param kwargs: :return: """ error_message = None address_list = consul_address(service_conf) exclude_addr = [] _address = None for _ in range(int(retry_times)): if len(address_list) > 1 and isinstance(address_list, list): [address_list.remove(_) for _ in exclude_addr if _ in address_list] try: url, address = build_url(address_list, api_path) _address = address res = requests.get(url, params={'service_name': service_name}, timeout=timeout) return res except (ConnectionError, ConnectTimeout)as ex: exclude_addr.append(_address) error_message = ex.__str__() logger.error('ACL_SERVICE error, api_path:{}, message: {}, retry:{}' .format(api_path, error_message, int(_)+1)) raise Exception('ACL_SERVICE error, api_path:{}, message: {}'.format(api_path, error_message))
def request(method, service_conf, api_path, timeout, retry_times, *args, **kwargs): error_message = None service_name = get_settings_service_name() request_service = service_conf['VALUE'] acl_token = get_acl_token(service_name) if acl_token is not None: params = kwargs.get('params', {}) params['acl_token'] = acl_token kwargs['params'] = params address_list = consul_address(service_conf) exclude_addr = [] _address = None for _ in range(int(retry_times)): if len(address_list) > 1 and isinstance(address_list, list): [address_list.remove(_) for _ in exclude_addr if _ in address_list] try: url, address = build_url(address_list, api_path) _address = address res = requests.request(method=method, url=url, timeout=timeout, *args, **kwargs) return res except (ConnectionError, ConnectTimeout, ReadTimeout)as ex: exclude_addr.append(_address) error_message = ex.__str__() logger.error("requests_client error,service_name:{}, request_service:{}, api_path:{}, message:{}, retry:{}" .format(service_name, request_service, api_path, error_message, int(_) + 1)) raise Exception("requests_client error, service_name: {}, request_service:{}, api_path:{}, message: {}" .format(service_name, request_service, api_path, error_message))
def request(method, service_address, api_path, protocol="http", token=None, *args, **kwargs): ''' :param token: should be a json format dict or json string, it should be {'uid': '1234abc', 'exp': 1722200316, 'iat': 1622193116, 'app_id': 'core'} type encode token by `json.dumps` to request header X-Jwt-Payload ''' service_name = get_service_name() request_url = build_url(protocol=protocol, address=service_address, api_path=api_path) headers = kwargs.pop('headers', {}) if token: if isinstance(token, dict): #token also should contain "uid" key headers.update({'X-Jwt-Payload': json.dumps(token)}) elif isinstance(token, str): headers.update({'X-Jwt-Payload': token}) else: logger.error(f"requests_client token parameter is not suitable type: {token}") tracer = opentracing.global_tracer() if tracer: span = tracer.active_span if span: carrier = {} tracer.inject(span, opentracing.Format.HTTP_HEADERS, carrier) headers.update(carrier) # logger.debug('=================== carrier: {}'.format(carrier)) try: res = requests.request(method=method, url=request_url, headers=headers, *args, **kwargs) return res except Exception as ex: error_message = "requests_client error, service_name:{}, protocol:{}, method:{}, " \ "request_service_address:{}, api_path:{}, message:{}" \ .format(service_name, protocol, method, service_address, api_path, ex.__str__()) logger.error(error_message) raise ex
def request(method, service_address, api_path, timeout, protocol="http", token=None, *args, **kwargs): service_name = get_settings_service_name() request_url = build_url(protocol=protocol, address=service_address, api_path=api_path) headers = kwargs.pop('headers', {}) if token: headers.update({'Authorization': "token " + token}) tracer = opentracing.global_tracer() if tracer: span = tracer.active_span if span: carrier = {} tracer.inject(span, opentracing.Format.HTTP_HEADERS, carrier) headers.update(carrier) logger.debug('=================== carrier: {}'.format(carrier)) try: res = requests.request(method=method, url=request_url, timeout=timeout, headers=headers, *args, **kwargs) return _handle_response(res) except Exception as ex: error_message = "rest_client error, service_name:{}, protocol:{}, method:{}, " \ "request_service_address:{}, api_path:{}, message:{}"\ .format(service_name, protocol, method, service_address, api_path, ex.__str__()) logger.error(error_message) raise HTTPException(error_message)