def do_common_request()

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)