python3.6 通过调用 阿里云 API (非SDK方式) 查询 可用区 例子

#!/usr/bin/env python3.5
# -*- coding:utf8 -*-
try:
import httplib
except ImportError:
import http.client as httplib
import sys, datetime
import urllib
import urllib.request
import urllib.error
import urllib.parse
import time
import json
import base64
import hmac, ssl
import uuid
from hashlib import sha1

# 解决 访问ssl网站证书的问题

try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn‘t verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn‘t support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context

class AliyunClient(object):
def __init__(self, access_id, access_secret, region,url):
self.access_id = access_id
self.access_secret = access_secret
self.RegionId = region
self.url = url

# #签名

def sign(self, accessKeySecret, parameters):
sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])
canonicalizedQueryString = ‘‘
for (k, v) in sortedParameters:
canonicalizedQueryString += ‘&‘ + self.percent_encode(k) + ‘=‘ + self.percent_encode(v)
stringToSign = ‘GET&%2F&‘ + self.percent_encode(canonicalizedQueryString[1:]) # 使用get请求方法
bs = accessKeySecret + ‘&‘
bs = bytes(bs, encoding=‘utf8‘)
stringToSign = bytes(stringToSign, encoding=‘utf8‘)
h = hmac.new(bs, stringToSign, sha1)
# 进行编码
signature = base64.b64encode(h.digest()).strip()
return signature

def percent_encode(self, encodeStr):
encodeStr = str(encodeStr)
res = urllib.request.quote(encodeStr)
res = res.replace(‘+‘, ‘%20‘)
res = res.replace(‘*‘, ‘%2A‘)
res = res.replace(‘%7E‘, ‘~‘)
return res

# 构建除共公参数外的所有URL

def make_url(self, params):
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
parameters = {
‘Format‘: ‘JSON‘,
‘Version‘: ‘2014-05-26‘,
‘AccessKeyId‘: self.access_id,
‘SignatureVersion‘: ‘1.0‘,
‘SignatureMethod‘: ‘HMAC-SHA1‘,
‘SignatureNonce‘: str(uuid.uuid1()),
‘TimeStamp‘: timestamp,
}
for key in params.keys():
parameters[key] = params[key]
signature = self.sign(self.access_secret, parameters)
parameters[‘Signature‘] = signature
url = self.url + "/?" + urllib.parse.urlencode(parameters)
return url

def do_action(self, params):
url = self.make_url(params)
request = urllib.request.Request(url)
try:
conn = urllib.request.urlopen(request)
response = conn.read().decode()
except urllib.error.HTTPError as e:
print(e.read().strip())
raise SystemExit(e)
try:
res = json.loads(response)
except ValueError as e:
raise SystemExit(e)
return res

# 继承原始类
class client(AliyunClient):
def __init__(self,access_id,access_secret,region,url):
AliyunClient.__init__(self,access_id,access_secret,region,url)

def timestrip(self):
UTCC = datetime.datetime.utcnow()
utcbefore5 = UTCC - datetime.timedelta(minutes=5)
Endtime = datetime.datetime.strftime(UTCC, "%Y-%m-%dT%H:%M:%SZ")
StartTime = datetime.datetime.strftime(utcbefore5, "%Y-%m-%dT%H:%M:%SZ")
return (StartTime, Endtime)

def DescribeInstance(self):
self.tt = self.timestrip()
action_dict = {"Action": "DescribeAvailableResource", "RegionId": self.RegionId, ‘DestinationResource‘: ‘Zone‘}
result = self.do_action(action_dict)
return result

if __name__ == "__main__":
a = client(‘xxxxxxxxx‘, ‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxx‘,‘cn-beijing‘,‘https://ecs.aliyuncs.com‘)
b = a.DescribeInstance()
print(b)

结果

{‘RequestId‘: ‘264CD6C2-BA6F-4AC2-B07C-EDEF173E470F‘, ‘AvailableZones‘: {‘AvailableZone‘: [{‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-f‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-c‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-e‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-d‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-a‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-b‘}, {‘Status‘: ‘Available‘, ‘RegionId‘: ‘cn-beijing‘, ‘ZoneId‘: ‘cn-beijing-g‘}]}}

参考:
https://www.cnblogs.com/IPYQ/p/5996868.html

原文地址:http://blog.51cto.com/hequan/2176032

时间: 2024-08-03 18:58:38

python3.6 通过调用 阿里云 API (非SDK方式) 查询 可用区 例子的相关文章

Python 调用阿里云 API 收集 ECS 数据

#!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2.将需要的数据整理.生成 Excel 文档 3.关于阿里 sdk 的安装,api 的调用请参考阿里云官网 4.xlsxwriter 请参考这里:http://xlsxwriter.readthedocs.org/ ''' import json, sys try: from termcolor imp

调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程

前言 在https://rorschachchan.github.io/2018/02/24/阿里云获取DTS服务延迟的脚本/ 文章里已经写过,领导现在要求"每天查看阿里云dts同步的延迟情况和同步速率情况",并且在https://rorschachchan.github.io/2018/02/27/使用matplotlib画图的一个脚本/ 里面也放了一个使用python matplotlib画图的demo,这篇文章的目的就是把整个过程实现,并且把dts图形以每日邮件的形式发送给领导的

阿里云api调用做简单的cmdb

阿里云api调用做简单的cmdb 1 步骤 事实上就是调用阿里api.获取可用区,比方cn-hangzhou啊等等.然后在每一个区调用api 取ecs的状态信息,最好写到一个excel里面去.方便排序排版. 2 示意图 3 源代码 https://github.com/gqdw/cmdb/tree/master

浅析阿里云API网关的产品架构和常见应用场景

自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了一个庞大的生态体系,在拥抱API经济的过程当中,API网关这一个组件起到了至关重要的作用. 什么是API网关 API 网关提供完整的 API 托管服务,辅助用户将能力.服务.数据以 API 的形式开放给合作伙伴,也可以发布到 API 市场供更多的开发者采购使用. 1.提供防攻击.防重放.请求加密.身

Powershell 调用阿里云 云解析API 实现动态域名解析

由于阿里云解析API调用官方文档中没有Powershell的示例脚本,而API接口调用实际是通过向DNS API的服务端地址发送HTTP POST或GET请求,因此根据官方文档写了相关的函数用于查询域名解析.修改域名解析的状态.如果要增删域名解析,参考官方文档修改函数中的Action等参数即可. 参考的阿里API调用链接:https://help.aliyun.com/document_detail/29743.html?spm=a2c4g.11186623.6.614.35f94c7bRwGb

零基础大数据入门教程:Java调用阿里云短信通道服务

这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1.2.1. 秘钥管理 1.2.2. 短信签名 1.2.3. 短信模板 1.3. SDK 这个由阿里云提供. 编译与打包. 打包到本地仓库,或者公司局域网内的私服地址. Maven打包 1.4. 第三步:创建SpringBoot工程,导入依赖 <!-- sms单独打包 --> <depende

调用阿里云短信服务

package com.example.demo.untils; /** * Created by JQY on 2019/5/15 */ import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.Send

python封装 阿里云api

最近用到阿里云的API和SDK ,用python封装了一下基础类,我只是用查询一下接口的信息,别的没有测试过,可以看看 内容如下: #-*- coding: utf-8 -*-# author: sunwei import jsonimport uuidfrom urllib import requestimport hmac,base64from hashlib import sha1from datetime import datetime, timedelta, timezone,date

调用阿里云OSS未释放资源造成的内存溢出

前段时间线上服务频繁出现内存溢出的问题,有时候半夜就会挂掉,运维同事还得从睡梦中爬起来重启,给我们带来很大的困扰.一次运维同事在快到挂掉前把jvm 的heap dump拿了下来给了我们,通过内存分析工具 MemoryAnalyzer 打开看到结果如下 可以看到有大量的org.apache.http.impl.conn.PoolingHttpClientConnectionManager 对象未被释放 ,并且可以看到是 阿里云的 oss 在引用的,灵机一动,可能是访问oss服务的时候某些资源没被释