Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云API:用Python使用腾讯云API(cvm实例)

腾讯云API:用Python使用腾讯云API(cvm实例)

原创
作者头像
None-xiaomi
修改于 2018-07-17 01:12:04
修改于 2018-07-17 01:12:04
26.2K104
代码可运行
举报
文章被收录于专栏:腾讯云API腾讯云API
运行总次数:4
代码可运行

腾讯云API地址:https://cloud.tencent.com/document/api

腾讯云为我们提供了很多服务或者功能的API,通过API我们可以快速定制自己的管理空间/后台,同时,也可以自定义维护方法。这个功能很多人都需要,但是却又很多人在使用这个API的时候出现了问题,其中,最常出现的问题,就是鉴权,尽管腾讯云的前辈们已经很努力在写鉴权文档了,但是,还是会有很多人看不懂,反复失败,不怕大家笑话,就这个文档,我自己就看了好几遍,才弄明白,也写了好多次才成功!有兴趣的小伙伴也欢迎加群讨论:711269805

模块/业务名:CVM

Action:DescribeInstances

实现语言:Python 3

代码:

代码语言:python
代码运行次数:4
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

# 作者:Dfounderliu(刘宇)
# 程序功能:腾讯云API DEMO

# 说明,在70,71行修改自己的secretId与secretKey
# 可以在https://console.cloud.tencent.com/capi 获取

# 运行结果:
#  "Response": {
#         "TotalCount": *,
#         "InstanceSet": [
#             {
#                ******
#          ],
#          "RequestId": "***********"
#    }
#}

import binascii
import hashlib
import hmac
import sys
import urllib.parse
import urllib.request
import time
import random

def sign(secretKey, signStr, signMethod):
    '''
    该方法主要是实现腾讯云的签名功能
    :param secretKey: 用户的secretKey
    :param signStr: 传递进来字符串,加密时需要使用
    :param signMethod: 加密方法
    :return:
    '''
    if sys.version_info[0] > 2:
        signStr = signStr.encode("utf-8")
        secretKey = secretKey.encode("utf-8")

    # 根据参数中的signMethod来选择加密方式
    if signMethod == 'HmacSHA256':
        digestmod = hashlib.sha256
    elif signMethod == 'HmacSHA1':
        digestmod = hashlib.sha1

    # 完成加密,生成加密后的数据
    hashed = hmac.new(secretKey, signStr, digestmod)
    base64 = binascii.b2a_base64(hashed.digest())[:-1]

    if sys.version_info[0] > 2:
        base64 = base64.decode()

    return base64

def dictToStr(dictData):
    '''
    本方法主要是将Dict转为List并且拼接成字符串
    :param dictData:
    :return: 拼接好的字符串
    '''
    tempList = []
    for eveKey, eveValue in dictData.items():
        tempList.append(str(eveKey) + "=" + str(eveValue))
    return "&".join(tempList)


# 用户必须准备好的secretId和secretKey
# 可以在 https://console.cloud.tencent.com/capi 获取
secretId = "你的secretId"
secretKey = "你的secretKey"

# 在此处定义一些必须的内容
timeData = str(int(time.time())) # 时间戳
nonceData = int(random.random()*10000) # Nonce,官网给的信息:随机正整数,与 Timestamp 联合起来, 用于防止重放攻击
actionData = "DescribeInstances" # Action一般是操作名称
uriData = "cvm.tencentcloudapi.com" # uri,请参考官网
signMethod="HmacSHA256" # 加密方法
requestMethod = "GET" # 请求方法,在签名时会遇到,如果签名时使用的是GET,那么在请求时也请使用GET
regionData = "ap-hongkong" # 区域选择
versionData = '2017-03-12' # 版本选择

# 签名时需要的字典
# 首先对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,
# 直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增
# 顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二
# 个“字母”,依此类推。
signDictData = {
    'Action' : actionData,
    'Nonce' : nonceData,
    'Region' : regionData,
    'SecretId' : secretId,
    'SignatureMethod':signMethod,
    'Timestamp' : int(timeData),
    'Version':versionData ,
}

# 获得拼接的字符串,用于签名
# 此步骤生成请求字符串。 将把上一步排序好的请求参数格式化成“参数名称”=“参数值”的形式,如对Action参数,
# 其参数名称为"Action",参数值为"DescribeInstances",因此格式化后就为Action=DescribeInstances。
# 注意:“参数值”为原始值而非url编码后的值。
# 然后将格式化后的各个参数用"&"拼接在一起,最终生成请求字符串。
# 此步骤生成签名原文字符串。 签名原文字符串由以下几个参数构成:
# 1) 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。
# 2) 请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。
# 3) 请求路径: 当前版本云API的请求路径固定为 / 。 4) 请求字符串: 即上一步生成的请求字符串。
# 签名原文串的拼接规则为:
#   请求方法 + 请求主机 +请求路径 + ? + 请求字符串
requestStr = "%s%s%s%s%s"%(requestMethod,uriData,"/","?",dictToStr(signDictData))

# 调用签名方法,同时将结果进行url编码,官方文档描述如下:
# 生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。 注意:如果用户的请求方法是GET,则对所有请求参
# 数值均需要做URL编码。 如上一步生成的签名串为 EliP9YW3pW28FpsEdkXt/+WcGeI= ,最终得到的签名串请求参数(Signature)
# 为: EliP9YW3pW28FpsEdkXt%2f%2bWcGeI%3d ,它将用于生成最终的请求URL。
signData = urllib.parse.quote(sign(secretKey,requestStr,signMethod))

# 上述操作是实现签名,下面即进行请求
# 先建立请求参数, 此处参数只在签名时多了一个Signature
actionArgs = signDictData
actionArgs["Signature"] = signData

# 根据uri构建请求的url
requestUrl = "https://%s/?"%(uriData)
# 将请求的url和参数进行拼接
requestUrlWithArgs = requestUrl + dictToStr(actionArgs)

# 获得response
responseData = urllib.request.urlopen(requestUrlWithArgs).read().decode("utf-8")

print(responseData)

# 获得到的结果形式:
#  "Response": {
#         "TotalCount": *,
#         "InstanceSet": [
#             {
#                ******
#          ],
#          "RequestId": "***********"
#    }
#}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
10 条评论
热度
最新
为什么我用你写的这个加密方法得出的结果跟官网生成的不一样
为什么我用你写的这个加密方法得出的结果跟官网生成的不一样
33点赞举报
现在不要用这个方法了哈,现在要用官方提供的api explorer哦。那个是官方提供的,有鉴权代码,也有SDK代码,很方便。
现在不要用这个方法了哈,现在要用官方提供的api explorer哦。那个是官方提供的,有鉴权代码,也有SDK代码,很方便。
回复回复点赞举报
官方提供的那个只有SDK的,我调用的接口不能用SDK。
官方提供的那个只有SDK的,我调用的接口不能用SDK。
回复回复点赞举报
查看全部3条回复
作者好厉害,赶紧模仿着学习下
作者好厉害,赶紧模仿着学习下
11点赞举报
别闹了,我们一起学习,哈哈哈哈
别闹了,我们一起学习,哈哈哈哈
回复回复点赞举报
学习了
学习了
回复回复点赞举报
满满的干货,准备实操一遍,谢谢分享!
满满的干货,准备实操一遍,谢谢分享!
11点赞举报
哈哈哈,谢谢支持,可以看下这个专栏,我做了一个API代码生成的小工具有兴趣可以试试
哈哈哈,谢谢支持,可以看下这个专栏,我做了一个API代码生成的小工具有兴趣可以试试
回复回复点赞举报
沙发沙发
沙发沙发
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
腾讯云API:让你的代码更加稳定(Python版)
之前发了两个文章,是关于腾讯云API的使用的文章,主要是小Demo的展示,用来帮助初学者,或者最初使用者作为参考。但是有些人可能有疑问,或者新的想法,你这代码是否可以进行一些“黑科技”,当然可以。首先,上一下之前的两个代码:
None-xiaomi
2018/06/01
4K1
【非官方教程】【视频】云API实践教程(上)
云API存在的目的是什么?有控制台给我们提供给中便利,我们为什么要用API来做一些操作?
None-xiaomi
2018/07/11
1K0
腾讯云API:无服务器函数
无服务器函数是一个很好玩的东西,可以通过这个程序跑一些脚本,在一定程度上,是很方便的。但是作为新鲜事物,一般很难被大家接受,所以,我今天在这里,就做一个小例子,来激发一下大家的Idea,创造力。
None-xiaomi
2018/06/20
5.5K0
利用API自动更新腾讯dnspod子域名解析记录实现ddns
由于个人网络是动态IP地址,导致每次重启路由器都会更换IP地址,或者是租约到期也会更新IP地址。 更换IP地址后每次都需要重新设置DNSPod,假如设置不及时还可能会影响到个人搭建的某些服务。 所以当时我就在想有没有办法实现定期查询本地IP地址与DNSPod记录IP地址是否相同, 相同则不进行任何操作,不同则自动上报更新IP地址。于是乎有了下面这个利用DNSPod的API实现动态更新IP地址的方法。
铭心
2024/12/20
7280
Python 和 PHP 对腾讯云签名 hmac_sha256 算法实现
开宗明义,米扑科技在使用腾讯云的API接口签名中,按照官方示例开发PHP、Python的接口,经常会提示签名错误
阳光岛主
2019/02/18
2.6K0
如何使用腾讯云云硬盘API
腾讯云控制台允许您以类似于使用硬盘驱动器的方式管理腾讯云CVM的额外存储。只需点击腾讯云简化的GUI或图形用户界面,即可为我们的CVM添加云硬盘。但是,这不是一个在大型集群的实用方法,因此腾讯云提供了相关API。我们可以通过腾讯云官方命令行工具直接与API进行交互。
好烟
2018/08/13
5.4K0
腾讯会议API常见使用误区 - 签名报错error_code 200003
签名错误是开发者在接入API过程中非常常见的错误,如果使用的是PHP或者Java,建议基于官网提供的demo代码来改造,基本能避免这个问题。常见的签名错误分为代码实现错误、调用方式错误和其他错误这几类,以下展开来讲解,并介绍验证签名的简易方法。
liquid
2021/06/24
4.6K0
腾讯会议API常见使用误区 - 签名报错error_code 200003
腾讯云语音识别v1签名算法详解
v1的签名文档:https://cloud.tencent.com/document/product/1093/35642
算法发
2020/08/28
2.7K0
腾讯云短信服务发送验证码
  由于阿里云需要备案过的域名或者已上线的APP才能申请短信签名,我的域名正在备案,申请还没通过,这里用腾讯云实现短信验证码的发送功能。腾讯云只需要你有个公众号就能申请短信签名,而且免费赠送200条。
别团等shy哥发育
2023/02/25
8.9K0
腾讯云短信服务发送验证码
CKafka系列学习文章 - 用java实现API调用(十一)
导语:上一章节我们了解了怎么手动拼接请求URL和用API2.0签名自动生成请求URL,来调用CKafka的接口,这一章将进入开发阶段,用java实现拼接请求URL,进行API调用。
发哥说消息队列
2019/09/06
6730
【AI接入迷你赛】腾讯云产品鉴权签名 v3
腾讯云 API 会对每个请求进行身份验证,用户需要使用安全凭证,经过特定的步骤对请求进行签名 Signature,每个请求都需要在公共请求参数中指定该签名结果并以指定的方式和格式发送请求 。
用户4299935
2019/09/11
5.8K1
【AI接入迷你赛】腾讯云产品鉴权签名 v3
GitHub Actions + 腾讯云COS + SCF云函数 + 自动刷新CDN 完美自动化部署静态网站
作为强迫症患者,一直对自动化部署非常痴迷,个人认为全自动部署最重要的就是稳定可靠,经过研究测试,最终使用GitHub和腾讯云两大平台,成功完成了全自动部署网站的实践.
用户8851537
2021/07/30
1.6K0
智能识别,一键兑换:腾讯云OCR智能结构化高级版识别在零售行业的应用实践
https://cloud.tencent.com/developer/article/2323707
快乐的小白
2025/01/12
2430
智能识别,一键兑换:腾讯云OCR智能结构化高级版识别在零售行业的应用实践
如何设计一个API签名
大部分情况下,我们使用已有的API签名方案(如腾讯云API签名、阿里云APi签名、亚马逊API签名等等)即可,无需从零开始设计一个API签名方案。写这篇文章的主要目的,是希望通过思考如何去设计一个可用API签名的过程,更好地理解现有的各种大同小异的签名方案背后的设计原理,从而更好地保护好我们的API接口。当然,有需要自己设计一个签名方案的场景也可参考一下。
林喜东
2019/12/22
5.6K1
如何设计一个API签名
从零开始使用腾讯云Java SDK
腾讯云开发者工具套件(SDK)是云 API 3.0 平台的配套工具。本文以 Java SDK 为例,介绍如何使用、调试并接入腾讯云产品 API。
zhijiehou
2021/06/25
12.9K2
CKafka系列学习文章 - 手动拼接和自动拼接请求URL(十)
导语:我们来搭建开发环境调用消息队列 CKafka--手动拼接和自动拼接请求URL,来调用获取消费分组offset的接口
发哥说消息队列
2019/09/05
1K0
Python实现腾讯云CDB备份文件自动上传到COS
一、背景 需求:目前遇到的客户需求为将腾讯云CDB备份文件自动上传到腾讯云COS内,再次抛砖引玉,还有很多类似的需求均可以采用此类方法解决,线下IDC数据文件备份至云端COS内,或根据文件下载地址url将文件上传至COS内。 思路:首先获取到CDB的备份下载url,通过COS的API上传文件,大佬如有更好的方法欢迎一块讨论。 二、技术细节 COS:COS有API同时有SDK,这就很方便我们来通过Python对COS进行各类操作,COS SDK for Python CDB:CDB有API但是CDB的查询备份
KaliArch
2018/07/16
2.7K0
Python实现腾讯云CDB备份文件自动上传到COS
【腾讯云的1001种玩法】WordPress 发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
张戈
2017/03/17
2.9K0
【腾讯云的1001种玩法】WordPress 发布/更新文章、提交/审核评论自动清理腾讯云CDN缓存
python3下搜狗AI API实现
a、搜狗也发布了自己的人工智能 api,包括身份证ocr、名片ocr、文本翻译等API,初试感觉准确率一般般。
黯然销魂掌
2018/09/27
9380
C# 实现腾讯云点播之媒体上传常用接口
腾讯云点播(Video On Demand)服务基于多年技术积累与基础设施建设,为有音视频应用相关需求的客户提供包括音视频存储管理、音视频转码处理、音视频加速播放、音视频加密、音视频AI能力的一站式解决方案,可通过云平台进行上传后的媒资管理。
初九之潜龙勿用
2024/06/20
2990
推荐阅读
相关推荐
腾讯云API:让你的代码更加稳定(Python版)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验