def body_producer(write): def on_data(data): write(data) req = HTTPRequest(url=file_info['path'], method="GET", connect_timeout=60, request_timeout=1800, streaming_callback=on_data, validate_cert=False) cli = AsyncHTTPClient() cli.max_body_size = MAX_IMAGE_SIZE yield cli.fetch(req)
def connect_request(session, type, url, method, response_key=None, body=None, body_producer=None, streaming_callback=None, interface=INTF_TYPE_ADMIN, token=None, content_length=None, request_timeout=600, max_body_size=None, content_type="application/json"): """ 请求openstack接口方法 :param response_key: :param session:{'url':url,'token':token,'token_id':"uuid"} :param type 服务类型 :param url: url参数 :param method: :param body: :param content_type :return: :param interface: 接口类型 'admin' - default, 'public', 'internal' :param token: private token """ token = token if token else session.id result = None intf_key = interface + 'URL' if type in session.urls and intf_key in session.urls[type]: service_url = session.urls[type][intf_key] else: raise OpenStackException() try: if body: body = json.dumps(body) req_url = service_url + url headers = {"X-Auth-Token": token, "Content-Type": content_type} if content_length: headers['Content-Length'] = str(content_length) req = HTTPRequest(url=req_url, method=method, body=body, body_producer=body_producer, streaming_callback=streaming_callback, headers=headers, connect_timeout=200, request_timeout=request_timeout, validate_cert=False) cli = AsyncHTTPClient() if max_body_size: cli.max_body_size = max_body_size rep = yield cli.fetch(req) if rep.body: result = json.loads(rep.body) if response_key: result = result[response_key] except Exception as e: LOG.error("request url [%s] body [%s] error %s", req_url, body, e.response.body) raise OpenStackException(e) raise gen.Return(result)