in src/ansible_collections/alibaba/apsarastack/plugins/module_utils/apsarastack_connections.py [0:0]
def do_common_request(conn, method:str, popcode: str, version:str, api_name:str, pattern:str="", headers:dict={}, query:dict={}, body:dict=None) -> dict:
if not conn.security_token:
credentials = AccessKeyCredential(conn.acs_access_key_id, conn.acs_secret_access_key)
else:
credentials = StsTokenCredential(conn.acs_access_key_id, conn.acs_secret_access_key, conn.security_token)
# 创建AcsClient连接,timeout设置请求超时时间(单位:ms)
client = AcsClient(region_id=conn.region, credential=credentials, timeout=10000)
# 创建API请求
request = CommonRequest()
# 产品接口信息参数
request.set_product(popcode)
request.set_version(version)
request.set_action_name(api_name)
if pattern:
request.setSysUriPattern(pattern)
# 云产品的Endpoint地址
request.set_domain(conn._endpoint)
# 设置请求方式
request.set_method(method)
# 设置请求协议类型
request.set_protocol_type('http')
# 阿里云核心库SDK发起API请求时,可以设置四种类型参数(Path/Query/Body/Header)
# Path参数用于对请求Request中设置的UriPattern进行变量替换
# Query参数用于对请求Request中的URL参数进行设置(一般用于GET请求)
# Body参数用于对请求Request中的HTTP Content进行设置(一般用于POST/PUT请求),在设置Body参数时,需要同时设置HTTP Content-Type,目前支持JSON和FORM两种格式
# Header参数用于对请求Request中的HTTP Header进行设置
# 设置Headers
# 设置身份标识,标识调用来源,无实际作用,可随意设置,必填项
for k, v in conn._default_headers.items():
request.add_header(k ,v)
for k, v in headers.items():
request.add_header(k ,v)
request.add_header("x-acs-caller-sdk-source", conn.user_agent)
request.set_user_agent(conn.user_agent)
if query:
request.set_query_params(query)
if body:
request.set_content_type('application/x-www-form-urlencoded')
request.set_body_params(body)
response = client.do_action_with_exception(request)
return json.loads(response)