云计算-使用华为云API调用LTS日志信息
  fsRA5BavLkMu 2023年11月02日 57 0

在项目中,需要使用华为云的API,来查询相关信息。本次记录了使用python的request模块,调用华为云LTS基础使用方法。

关于华为云LTS,见官网文档:https://support.huaweicloud.com/lts/index.html

关于华为云API,见官方文档:https://support.huaweicloud.com/api-lts/lts_api_0030.html

api调试

登录获取token

根据华为云API调用,按照如下调用接口

url:https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true

method:post

body:

{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "domain": {
                        "name": "******"        //IAM用户所属帐号名
                    },
                    "name": "chaoyangdg",             //IAM用户名
                    "password": "********"      //IAM用户密码
                }
            }
        },
        "scope": {
            "project": {
                "name": "cn-north-4"               //项目名称
            }
        }
    }
}

我使用apipost工具进行调试:

云计算-使用华为云API调用LTS日志信息_json

发送请求后:

实时相应,回应了相关账号信息,权限信息

云计算-使用华为云API调用LTS日志信息_用户名_02

在相应头中,X-Subject-Token字段包含了加密后的token,然后这个token就是以后需要调用

云计算-使用华为云API调用LTS日志信息_用户名_03

一般token都是24小时的,超期后需要再次申请

查询所有日志信息

根据华为API案例,获取token后,就能进而查询到相关信息,例如查询账号下所有的日志组

url:https://lts.cn-north-4.myhuaweicloud.com/v2/06aaa0968d000f2c2f58c010ee9729a4/groups

method:get

云计算-使用华为云API调用LTS日志信息_json_04

构造的请求中,在headeri填写如下信息:

Content-Type:application/json

x-auth-token:加密后的token

发送请求后,就能在实时响应中看到查询的信息

云计算-使用华为云API调用LTS日志信息_json_05

python脚本

脚本的结构如下:

云计算-使用华为云API调用LTS日志信息_API_06

#config.py
#记录配置文件
#IAM登录信息
url="https://iam.myhuaweicloud.com/v3/auth/tokens?nocatalog=true"
IAMDomain="******"
IAMUser="chaoyangdg"
IAMPassword="*********"
name="cn-north-4"
#endpoint,projectid信息
endpoint="https://lts.cn-north-4.myhuaweicloud.com"
project_id="*****************"


#demo1.py
import requests
import config
import json
#使用华为云的API调用TLS测试
#ver 1.0
'''
1、使用IAM,获取用户token
2、登录后,获取信息
'''

class ApiLogin():
    """
    login by iam,return accesstoken
    """
    def __init__(self,IAMDomain:str,IAMUser:str,IAMPassword:str,name:str,url:str):
        """
        IAMDomain:IAM用户所属帐号名
        IAMUser:IAM用户名
        IAMPassword:IAM用户密码
        name:项目名称,区域
        url:华为URL
        """
        self.IAMDomain=IAMDomain
        self.IAMUser=IAMUser
        self.IAMPassword=IAMPassword
        self.name=name
        self.url=url
    
    def get_auth_token(self)->str:
        """
        return accesstoken
        """
        payload = {
            "auth": {
            "identity": {
                "methods": [
                    "password"
            ],
            "password": {
                "user": {
                    "domain": {
                        "name": self.IAMDomain        #IAM用户所属帐号名
                    },
                    "name": self.IAMUser,             #IAM用户名
                    "password": self.IAMPassword      #IAM用户密码
                }
            }
        },
        "scope": {
            "project": {
                "name": self.name              #项目名称
            }
        }
        }
        }
        header={'Content-Type': 'application/json'}
        json_data=json.dumps(payload)
        try:
            response = requests.post(self.url,data=json_data,headers=header,verify=False)
            response.raise_for_status()  # 检查请求是否成功
            #获取响应头的token
            access_token=response.headers.get("X-Subject-Token")
            
            #token_data = response.json()
            #access_token = response.json()
            #access_token = access_token["X-Subject-Token"]
            return access_token
            
        except requests.exceptions.RequestException as e:
            print("认证请求发生错误:", e)

class GetLts():
    """
    获取LTS信息
    """
    def __init__(self,token) -> None:
        self.token=token
        self.header={
            'Content-Type': 'application/json', 'X-Auth-Token': self.token
        }
    
    def get_all_groups(self)->dict:
        """
        查询账号下的所有日志组
        """
        url=str(config.endpoint+"/v2/"+config.project_id+"/groups")
        resp=requests.get(url=url,headers=self.header,verify=False)
        content=resp.content
        #content=json(content)
        #转换为字符串
        content_str=content.decode('utf-8')
        #转换为字典
        content_dict=json.loads(content_str)
        #print(content_dict)
        #print (type(content_dict))
        return content_dict
    

if __name__=="__main__":
    IAMDomain=config.IAMDomain
    IAMUser=config.IAMUser
    IAMPassword=config.IAMPassword
    name=config.name
    url=config.url
    Api_login=ApiLogin(IAMDomain,IAMUser,IAMPassword,name,url)
    token=Api_login.get_auth_token()
    Get_lts=GetLts(token=token)
    Get_lts.get_all_groups()

云计算-使用华为云API调用LTS日志信息_json_07

最后将获取到LTS所有日志组信息,都以字典的形式返回


总结

1、记录华为API调用的一般方法

2、其他的API调用跟此类似

3、能够通过api获取到的信息就能进一步加工,能够实现复杂程序的指定功能

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年11月19日   16   0   0 用户名whoami