CINXE.COM
<!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1"/><meta charSet="UTF-8"/><meta name="format-detection" content="telephone=no"/><meta name="applicable-device" content="pc,mobile"/><meta property="og:image" content="https://cloudcache.tencent-cloud.com/open_proj/proj_qcloud_v2/gateway/shareicons/cloud.png"/><title data-react-helmet="true">流计算 Oceanus 签名方法-调用方式-API 中心-腾讯云</title><meta data-react-helmet="true" name="keywords" content="腾讯云,文档中心,产品文档,开发者,负载均衡,防攻击,防DDos攻击,安全,常见问题,云服务器,云主机,CDN,对象存储,MySQL,域名注册,备案,数据库,互联网+,文档,API,SDK,入门,云+,购买指引,计费,账号,认证"/><meta data-react-helmet="true" name="description" content="签名方法v1简单易用,但是功能和安全性都不如签名方法v3,推荐使用签名方法v3。首次接触,建议使用APIExplorer中的“签名串生成”功能,选择签名版本为“API3.0签名v1”,可以生成签名过程"/><link rel="icon" href="//cloudcache.tencent-cloud.com/qcloud/favicon.ico" type="image/x-icon"/><script> document.domain = 'cloud.tencent.com' </script><link rel="stylesheet" href="//cloudcache.tencent-cloud.com/qcloud/ui/gateway/portal/css/global-202307041440.css?max_age=31536000&t=20191128"/><link rel="stylesheet" href="//cloudcache.tencent-cloud.com/open_proj/proj_qcloud_v2/gateway/portal/css/global-components.css?max_age=31536000&t=20180817"/><link data-react-helmet="true" rel="canonical" href="https://cloud.tencent.com/document/product/849/52015"/><link data-react-helmet="true" rel="stylesheet" href="//cloudcache.tencent-cloud.com/qcloud/ui/gateway/documentation/documentation-v4/css/pandect-202209201611.css"/><link data-react-helmet="true" rel="stylesheet" href="//cloudcache.tencent-cloud.com/open_proj/proj_qcloud_v2/gateway/documentation/documentation-v4/css/import-2-markdown-20219091610.css"/><link data-react-helmet="true" rel="stylesheet" href="//cloudcache.tencent-cloud.com/qcloud/ui/platform/documents/css/documents-202502200955.css"/><link data-react-helmet="true" rel="stylesheet" href="//cloudcache.tencent-cloud.com/qcloud/main/components/document-feedback/document-feedback.6df63d65d2.css"/><style data-react-helmet="true"> /* 新版导航与底部在详情页上的特殊处理,在需要处理的页面 body 元素上加上 fix-jssdk start */ @media screen and (max-width: 1240px) and (min-width: 769px) { .fix-jssdk .pls-m-nav { height: 56px; } .fix-jssdk .pls-m-nav-bar { position: fixed; left: 0; top: 0; right: 0; } } @media screen and (max-width: 1000px) and (min-width: 769px) { .fix-jssdk .pls-footer-visible-m { display: none !important; } } /* 新版导航与底部在详情页上的特殊处理 end */ .no-translate-tips { height: 72px; background: #F6FCFF; padding: 0 20px; font-size: 14px; color: #333; position: relative; display: flex; align-items: center; justify-content: space-between; border: 1px solid #00A4FF; margin: 20px 0 -2px; z-index: 100; } .no-translate-tips.fixed-top { border: none; margin: 0; } .no-translate-tips .close { cursor: pointer; } @media screen and (max-width: 768px) { .no-translate-tips { padding: 0 16px; } } </style><link rel="stylesheet" href="https://cloudcache.tencent-cloud.com/qcloud/doc/styles/document/app.e924a617.css"/><script src="https://tam.cdn-go.cn/aegis-sdk/latest/aegis.min.js"></script><script> if (window.Aegis) { var aegis = window.aegisIns = new Aegis({ id: "dWOw9fv7jg4XmVzQ09", pagePerformance: true, onError: true, ext1: 'hXS10lI4hm', pagePerformance: true, reportAssetSpeed: true, reportApiSpeed: true, beforeRequest: function (data) { // 过滤掉一些明确上报 var ignoreKeys = [ 'Script error', 'chrome-extension', 'qq.com', 'queryWeappQrcodeStatus', 'login/ajax/info', 'woa.com', 'trafficCollect.php', 'google', 'dscache', 'act-api', 'set_qc_cookie', 'opc.cloud.tencent.com', 'uc_gre_ad_buss', 'eb.xcj.pub' ]; var alarmMsg = [data.logs.url, data.logs.msg].join('|'); for (var i=0; i<ignoreKeys.length; i++) { if (alarmMsg.indexOf(ignoreKeys[i]) != -1) return false; } // 过滤掉爬虫和开发者工具环境 if (/bot|wechatdevtools|spider/i.test(navigator.userAgent)) { return false; } // 过滤掉堆栈里无js文件的 if (data.logs.level === '4' && data.logs.msg && data.logs.msg.indexOf('.js') === -1) { return false; } } }) } </script></head><body class="documents-details color-bg fix-jssdk"><div id="no-global-if-no-need"> <script> var shouldHideGlobalComponent = window !== top && /^cloud\.tencent\.(com|cn|com\.cn)$/.test(top.document.domain) && top.DisableIFrameOfficialHeaderAndFooter; if (shouldHideGlobalComponent) { var head = document.getElementsByTagName('head')[0]; var hideStyles = n="#navigationBar,#navigationBarM,#qcportal-kit-footer,.c-hero-bar,.J-qc-footer,.J-subHeader,.J-docSidebarSearch{display:none!important}@media only screen and (max-width: 768px){.doc-box .table-box {padding-top:20px!important}.c-hero-bar-tit {margin-top:10px}}.doc-aside{padding-top:18px!important}.doc-con.J-mainDetail{padding-top:16px}.documents-container {overflow-x: hidden !important;}.documents-details .rno-column-layout-aside {top: 57px !important;}.J-detailLayout {padding-top: 0 !important;}.J-docHead {top: 0 !important;position: relative !important;}.J-docHead .topbar-guide-nav {top: 0 !important;}"; var linkElement = document.createElement('link'); linkElement.setAttribute('rel', 'stylesheet'); linkElement.setAttribute('type', 'text/css'); linkElement.setAttribute('href', 'data:text/css;charset=UTF-8,' + encodeURIComponent(hideStyles)); head.appendChild(linkElement); } </script> </div><div><link id="qcportal-kit-style" rel="stylesheet" href="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/full.fb65a6aca3fcbd604772.css"></div><div><div id="qcportal-kit-topnav"><div role="navigation" id="navigationBar" data-type="cn_zh" class="pls-nav fixed"><div class="pls-nav-mod"><div class="pls-nav-top"><a class="pls-nav-top-logo" href="https://cloud.tencent.com" hotrep="hp.header.hp"><i>腾讯云</i></a><div class="pls-nav-list-wrap"><ul class="pls-nav-list"><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.act" href="https://cloud.tencent.com/act">最新活动<i class="pls-nav-tag hot"><span class="pls-nav-tag-text">HOT</span></i></a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.product" href="https://cloud.tencent.com/product">产品</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.solution" href="https://cloud.tencent.com/solution">解决方案</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.price" href="https://buy.cloud.tencent.com/pricing">定价</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.ecenter" href="https://cloud.tencent.com/act/pro/center">企业中心</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.market" href="https://market.cloud.tencent.com">云市场</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.developer" href="https://cloud.tencent.com/landing/developer-ecology">开发者</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.support" href="https://cloud.tencent.com/act/event/service-support">客户支持</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.cooperate" href="https://cloud.tencent.com/landing/partner-ecology">合作与生态</a></li><li class="pls-nav-item" tabindex="-1"><a role="button" hotrep="hp.header.learn" href="https://cloud.tencent.com/about">了解腾讯云</a></li></ul></div><div class="pls-nav-top-operation"></div></div><section class="pls-nav-dropdown" style="visibility:hidden;height:0"><div style="height:0;transition:transform ease-in-out .2s, opacity ease-in-out .2s;opacity:0;transform:translate(0, -100%)"><a class="pls-nav-dropdown-close" hotrep="hp.header.close">关闭</a></div></section></div></div> <div id="navigationBarM" class="pls-m-nav"><div class="pls-m-nav-bar"><div class="pls-m-nav-bar-main"><a href="https://cloud.tencent.com/" class="pls-m-nav-logo"></a></div><div class="pls-m-nav-bar-extra"><a class="pls-m-nav-btn" aria-label="搜索"><i class="pls-m-nav-btn-icon search"></i></a><a class="pls-m-nav-btn profile" aria-label="用户"><i class="pls-m-nav-btn-icon user"></i></a><a class="pls-m-nav-btn" aria-label="菜单"><i class="pls-m-nav-btn-icon menu"><span></span><span></span><span></span></i></a></div></div><div class="pls-m-nav-dropdown search" style="display:none"><div class="pls-m-nav-search"><div class="pls-m-nav-search-bar"><input type="text" class="pls-m-nav-search-input" placeholder="请输入搜索的关键词" value=""/><a class="pls-m-nav-search-btn">搜索</a></div></div></div></div></div></div><div id="react-root" aegis-first-screen-timing="true"><div class="J-mainContent responsible documents-container" style="background-color:#fff"><div class="rno-column-layout J-pc-wrap"><div class="J-body-wrap layout-columns" style="position:relative"><div class="rno-column-layout-cont J-layoutCont rno-details-compact"><div class="J-docDetailSide rno-column-layout-aside" style="top:97px;transform:"><div class="rno-column-layout-aside-inner"><div class="rno-column-aside-hd-2 J-docDetailSideTit" style="margin-top:38px"><a href="/document/api" data-bypass-xhr="true" class="rno-column-aside-title-2">API 中心</a><i class="rno-column-aside-menu-fold-2 J-productNavCollapseTrigger"></i></div><div class="rno-column-aside-bd-2 doc-aside-wrap J-sideScrollArea J-sideNavInnerBoxPc"></div></div></div><div class="rno-document-details-layout rno-document-head-topbar-layout J-detailLayout rno-toc-layout" style="margin-top:"><div class="rno-document-head J-docHead" style="left:auto;top:60px"><div class="topbar-guide-nav" style="position:fixed;width:100%;left:0;top:60px"><div class="topbar-guide-inner"><ul class="topbar-guide-link"><li><a hotrep="doc.topsearch.product" href="https://cloud.tencent.com/document/product">文档中心</a></li> <li><a hotrep="doc.topsearch.guide" href="https://cloud.tencent.com/guide">入门中心</a></li> <li><a hotrep="doc.topsearch.api" href="https://cloud.tencent.com/document/api">API 中心</a></li> <li><a hotrep="doc.topsearch.sdk" href="https://cloud.tencent.com/document/sdk">SDK 中心</a></li> <li><a hotrep="doc.topsearch.doc-center" class="J-myFeedback">我的反馈</a></li></ul><div class="topbar-guide-btn-2 J-searchTopbar"><a class="topbar-guide-btn-tips" href="https://cloud.tencent.com/document/product/855/115982">开发与运维产品文档捉虫活动邀您参加!><!-- --> <i>HOT</i></a><div class="topbar-guide-btn-2-inner" hotrep="doc.topsearch.searchbtn" style="text-align:right"><input value="" class="J-searchInput topbar-guide-btn-2-box" placeholder="搜索相关文档"/><div class="topbar-guide-btn-2-search" id="J-searchPanelActivateBtn"><i class="topbar-guide-btn-2-search-icon"></i></div></div></div></div></div></div><div class="rno-document-details-wrap"><div style="display:none"><div class="rno-search-mobile-bar J-subHeader"><a class="rno-search-mobile-menu J-phoneMenu"><i class="rno-search-mobile-menu-icon"></i></a><div class="rno-search-mobile-inner"><div class="rno-search-mobile-panel J-docSidebarSearchM"><div class="rno-search-mobile-wrap J-docSidebarSearchWrapper"><input type="text" readonly="" value="" class="rno-search-mobile-input J-docSidebarSearchInput" placeholder="搜索本产品下的文档内容"/><button class="rno-search-mobile-btn J-docSidebarSearchBtn">查询</button></div><div class="rno-4-hero-search-list-wrap" style="display:none"><ul class="rno-4-hero-search-list rno-scrollbar J-docSidebarSearchList"></ul><div class="rno-4-hero-search-list-all J-docSidebarSearchItemAll"><a href="https://cloud.tencent.com/search">查看全部搜索结果</a></div></div></div></div></div></div><div class="rno-document-details-cont J-mainDetail"><div style="padding:0"><div class="J-innerMain" data-hastoc="1"><div class="rno-header-crumbs-2"><div class="rno-header-crumbs-inner-2"><a href="/document/product" title="文档中心" data-bypass-xhr="true" hotrep="document.article.breadcrumb" class="rno-header-crumbs-link-2">文档中心</a><i class="rno-header-crumbs-icon-2">></i><a href="/document/api" title="API 中心" hotrep="document.article.breadcrumb" class="rno-header-crumbs-link-2">API 中心</a><i class="rno-header-crumbs-icon-2">></i><a href="/document/api/849" title="流计算 Oceanus" hotrep="document.article.breadcrumb" class="rno-header-crumbs-link-2">流计算 Oceanus</a><i class="rno-header-crumbs-icon-2">></i><a href="/document/api/849/52011" title="调用方式" hotrep="document.article.breadcrumb" class="rno-header-crumbs-link-2">调用方式</a><i class="rno-header-crumbs-icon-2">></i><span class="rno-header-crumbs-link-2 active">签名方法</span></div></div><div class="J-markdown-box"><div class="rno-title-module J-mainTitle"><h1 class="rno-title-module-title">签名方法</h1><div class="rno-title-module-body"><p class="rno-title-module-date">最近更新时间:<!-- -->2024-12-25 01:51:32</p><div class="rno-title-module-operate"><div class="J-docShareModal rno-title-module-btn share com-share-bubble-trigger c-triangle-align-start com-share-pc m-hidden" hotrep="document.share"><a class="J-docShareToggleBtn com-share-bubble-trigger-link com-opt-link" style="cursor:pointer"><i class="rno-title-module-share"></i></a><div class="c-bubble c-bubble-top com-share-bubble"><div class="c-bubble-inner"><ul class="com-share-bubble-opts"><li><span class="com-share-bubble-text"><i class="com-share-bubble-icon wechat"></i><span>微信扫一扫</span></span><div class="J-docShareQRCodeContainer com-share-bubble-code"><img src=""/></div></li><li><a class="J-docShareLink com-share-bubble-link" data-sharetype="qq" target="_blank" hotrep="document.share.qq" style="cursor:pointer"><i class="com-share-bubble-icon qq"></i><span>QQ</span></a></li><li><a class="J-docShareLink com-share-bubble-link" data-sharetype="weibo" target="_blank" hotrep="document.share.weibo" style="cursor:pointer"><i class="com-share-bubble-icon weibo"></i><span>新浪微博</span></a></li><li><div class="J-docShareCopyTipModal com-share-bubble-trigger"><a class="J-docShareCopySiteBtn com-share-bubble-link" style="cursor:pointer"><i class="com-share-bubble-icon link"></i><span>复制链接</span></a><div class="com-share-bubble c-bubble c-bubble-top com-share-bubble-msg"><div class="c-bubble-inner"><i class="icon"></i>链接复制成功</div></div></div></li></ul></div></div></div><a class="J-docFavoriteActBtn rno-title-module-btn" style="cursor:pointer"><i class="rno-title-module-fav"></i></a><a class="rno-title-module-btn fav J-myCollection" target="_blank"><span class="rno-title-module-text"><em>我的收藏</em></span></a></div></div></div><div class="rno-document-details-side"><div class="markdown-nav J-navContainer absolute" style="margin-left:0;top:179px"><h2 class="nav-title">本页目录:</h2><ul class="markdown-nav-list J-floatCategory"><li><a href="#1.-.E7.94.B3.E8.AF.B7.E5.AE.89.E5.85.A8.E5.87.AD.E8.AF.81" title="1. 申请安全凭证">1. 申请安全凭证</a></li><li><a href="#2.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2" title="2. 生成签名串">2. 生成签名串</a><ul><li><a href="#2.1.-.E5.AF.B9.E5.8F.82.E6.95.B0.E6.8E.92.E5.BA.8F" title="2.1. 对参数排序">2.1. 对参数排序</a></li><li><a href="#2.2.-.E6.8B.BC.E6.8E.A5.E8.AF.B7.E6.B1.82.E5.AD.97.E7.AC.A6.E4.B8.B2" title="2.2. 拼接请求字符串">2.2. 拼接请求字符串</a></li><li><a href="#2.3.-.E6.8B.BC.E6.8E.A5.E7.AD.BE.E5.90.8D.E5.8E.9F.E6.96.87.E5.AD.97.E7.AC.A6.E4.B8.B2" title="2.3. 拼接签名原文字符串">2.3. 拼接签名原文字符串</a></li><li><a href="#2.4.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2" title="2.4. 生成签名串">2.4. 生成签名串</a></li></ul></li><li><a href="#3.-.E7.AD.BE.E5.90.8D.E4.B8.B2.E7.BC.96.E7.A0.81" title="3. 签名串编码">3. 签名串编码</a></li><li><a href="#4.-.E7.AD.BE.E5.90.8D.E5.A4.B1.E8.B4.A5" title="4. 签名失败">4. 签名失败</a></li><li><a href="#5.-.E7.AD.BE.E5.90.8D.E6.BC.94.E7.A4.BA" title="5. 签名演示">5. 签名演示</a><ul><li><a href="#Java" title="Java">Java</a></li><li><a href="#Python" title="Python">Python</a></li><li><a href="#Golang" title="Golang">Golang</a></li><li><a href="#PHP" title="PHP">PHP</a></li><li><a href="#Ruby" title="Ruby">Ruby</a></li><li><a href="#DotNet" title="DotNet">DotNet</a></li><li><a href="#NodeJS" title="NodeJS">NodeJS</a></li></ul></li></ul></div></div><div id="docArticleContent" class="doc-article-content"><div class="markdown-text-box"><div class="glossary-product"><p>签名方法 v1 简单易用,但是功能和安全性都不如签名方法 v3,推荐使用签名方法 v3。</p> <p>首次接触,建议使用 <a href="https://console.cloud.tencent.com/api/explorer">API Explorer</a> 中的“签名串生成”功能,选择签名版本为“API 3.0 签名 v1”,可以生成签名过程进行验证,并提供了部分编程语言的签名示例,也可直接生成 SDK 代码。推荐使用腾讯云 API 配套的 8 种常见的编程语言 SDK,已经封装了签名和请求过程,均已开源,支持 <a href="https://github.com/TencentCloud/tencentcloud-sdk-python">Python</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-java">Java</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-php">PHP</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-go">Go</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-nodejs">NodeJS</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-dotnet">.NET</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-cpp">C++</a>、<a href="https://github.com/TencentCloud/tencentcloud-sdk-ruby">Ruby</a>。</p> <div class="rno-api-explorer"> <div class="rno-api-explorer-inner"> <div class="rno-api-explorer-hd"> <div class="rno-api-explorer-title"> 推荐使用 API Explorer </div> <a href="https://console.cloud.tencent.com/api/explorer?SignVersion=api3v1" class="rno-api-explorer-btn" hotrep="doc.api.explorerbtn"><i class="rno-icon-explorer"></i>点击调试</a> </div> <div class="rno-api-explorer-body"> <div class="rno-api-explorer-cont"> 您可以通过 API Explorer 的【签名串生成】模块查看每个接口签名的生成过程。 </div> </div> </div> </div> <p>腾讯云 API 会对每个访问请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证请求者身份。<br>签名信息由安全凭证生成,安全凭证包括 SecretId 和 SecretKey;若用户还没有安全凭证,请前往 <a href="https://console.cloud.tencent.com/capi">云API密钥页面</a> 申请,否则无法调用云 API 接口。</p> <h2 id="1.-.E7.94.B3.E8.AF.B7.E5.AE.89.E5.85.A8.E5.87.AD.E8.AF.81">1. 申请安全凭证</h2><p>在第一次使用云 API 之前,请前往 <a href="https://console.cloud.tencent.com/capi">云 API 密钥页面</a> 申请安全凭证。<br>安全凭证包括 SecretId 和 SecretKey:</p> <ul> <li>SecretId 用于标识 API 调用者身份</li> <li>SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。</li> <li><strong>用户必须严格保管安全凭证,避免泄露。</strong></li> </ul> <p>申请安全凭证的具体步骤如下:</p> <ol> <li>登录 <a href="https://console.cloud.tencent.com/">腾讯云管理中心控制台</a> 。</li> <li>前往 <a href="https://console.cloud.tencent.com/capi">云 API 密钥</a> 的控制台页面</li> <li>在 <a href="https://console.cloud.tencent.com/capi">云 API 密钥</a> 页面,单击【新建密钥】即可以创建一对 SecretId/SecretKey。</li> </ol> <p>注意:每个账号最多可以拥有两对 SecretId/SecretKey。</p> <h2 id="2.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2">2. 生成签名串</h2><p>有了安全凭证 SecretId 和 SecretKey 后,就可以生成签名串了。以下是使用签名方法 v1 生成签名串的详细过程:</p> <p>假设用户的 SecretId 和 SecretKey 分别是:</p> <ul> <li>SecretId: <code>AKID********************************</code></li> <li>SecretKey: <code>********************************</code></li> </ul> <p><strong>注意:这里只是示例,请根据用户实际申请的 SecretId 和 SecretKey 进行后续操作!</strong></p> <p>以云服务器查看实例列表(DescribeInstances)请求为例,当用户调用这一接口时,其请求参数可能如下:</p> <table> <thead> <tr> <th>参数名称</th> <th>中文</th> <th>参数值</th> </tr> </thead> <tbody><tr> <td>Action</td> <td>方法名</td> <td>DescribeInstances</td> </tr> <tr> <td>SecretId</td> <td>密钥 ID</td> <td><code>AKID********************************</code></td> </tr> <tr> <td>Timestamp</td> <td>当前时间戳</td> <td>1465185768</td> </tr> <tr> <td>Nonce</td> <td>随机正整数</td> <td>11886</td> </tr> <tr> <td>Region</td> <td>实例所在区域</td> <td>ap-guangzhou</td> </tr> <tr> <td>InstanceIds.0</td> <td>待查询的实例 ID</td> <td>ins-09dx96dg</td> </tr> <tr> <td>Offset</td> <td>偏移量</td> <td>0</td> </tr> <tr> <td>Limit</td> <td>最大允许输出</td> <td>20</td> </tr> <tr> <td>Version</td> <td>接口版本号</td> <td>2017-03-12</td> </tr> </tbody></table> <p>这里只展示了部分公共参数和接口输入参数,用户可以根据实际需要添加其他参数,例如 Language 和 Token 公共参数。</p> <h3 id="2.1.-.E5.AF.B9.E5.8F.82.E6.95.B0.E6.8E.92.E5.BA.8F">2.1. 对参数排序</h3><p>首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。用户可以借助编程语言中的相关排序函数来实现这一功能,如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:</p> <p><pre><code>{ 'Action' : 'DescribeInstances', 'InstanceIds.0' : 'ins-09dx96dg', 'Limit' : 20, 'Nonce' : 11886, 'Offset' : 0, 'Region' : 'ap-guangzhou', 'SecretId' : 'AKID********************************', 'Timestamp' : 1465185768, 'Version': '2017-03-12', }</code></pre>使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。</p> <h3 id="2.2.-.E6.8B.BC.E6.8E.A5.E8.AF.B7.E6.B1.82.E5.AD.97.E7.AC.A6.E4.B8.B2">2.2. 拼接请求字符串</h3><p>此步骤生成请求字符串。<br>将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 "Action" ,参数值为 "DescribeInstances" ,因此格式化后就为 Action=DescribeInstances 。<br><strong>注意:“参数值”为原始值而非 url 编码后的值。</strong></p> <p>然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:</p> <p><pre><code>Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12</code></pre></p> <h3 id="2.3.-.E6.8B.BC.E6.8E.A5.E7.AD.BE.E5.90.8D.E5.8E.9F.E6.96.87.E5.AD.97.E7.AC.A6.E4.B8.B2">2.3. 拼接签名原文字符串</h3><p>此步骤生成签名原文字符串。<br>签名原文字符串由以下几个参数构成:</p> <ol> <li>请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。</li> <li>请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。</li> <li>请求路径: 当前版本云API的请求路径固定为 / 。</li> <li>请求字符串: 即上一步生成的请求字符串。</li> </ol> <p>签名原文串的拼接规则为:<code>请求方法 + 请求主机 +请求路径 + ? + 请求字符串</code>。</p> <p>示例的拼接结果为:</p> <p><pre><code>GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12</code></pre></p> <h3 id="2.4.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2">2.4. 生成签名串</h3><p>此步骤生成签名串。<br>首先使用 HMAC-SHA1 算法对上一步中获得的<strong>签名原文字符串</strong>进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。</p> <p>具体代码如下,以 PHP 语言为例:</p> <p><pre><code>$secretKey = '********************************'; $srcStr = 'GETcvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Timestamp=1465185768&Version=2017-03-12'; $signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true)); echo $signStr;</code></pre></p> <p>最终得到的签名串为:</p> <p><pre><code>7RAM2xfNMO9EiVTNmPg06MRnCvQ=</code></pre></p> <p>使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。</p> <h2 id="3.-.E7.AD.BE.E5.90.8D.E4.B8.B2.E7.BC.96.E7.A0.81">3. 签名串编码</h2><p>生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。</p> <p>如上一步生成的签名串为 7RAM2xfNMO9EiVTNmPg06MRnCvQ= ,最终得到的签名串请求参数(Signature)为:7RAM2xfNMO9EiVTNmPg06MRnCvQ%3D,它将用于生成最终的请求 URL。</p> <p><strong>注意:如果用户的请求方法是 GET,或者请求方法为 POST 同时 Content-Type 为 application/x-www-form-urlencoded,则发送请求时所有请求参数的值均需要做 URL 编码,参数键和=符号不需要编码。非 ASCII 字符在 URL 编码前需要先以 UTF-8 进行编码。</strong></p> <p><strong>注意:有些编程语言的网络库会自动为所有参数进行 urlencode,在这种情况下,就不需要对签名串进行 URL 编码了,否则两次 URL 编码会导致签名失败。</strong></p> <p><strong>注意:其他参数值也需要进行编码,编码采用 <a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a>。使用 %XY 对特殊字符例如汉字进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F),使用小写将引发错误。</strong></p> <h2 id="4.-.E7.AD.BE.E5.90.8D.E5.A4.B1.E8.B4.A5">4. 签名失败</h2><p>根据实际情况,存在以下签名失败的错误码,请根据实际情况处理。</p> <table> <thead> <tr> <th>错误代码</th> <th>错误描述</th> </tr> </thead> <tbody><tr> <td>AuthFailure.SignatureExpire</td> <td>签名过期</td> </tr> <tr> <td>AuthFailure.SecretIdNotFound</td> <td>密钥不存在</td> </tr> <tr> <td>AuthFailure.SignatureFailure</td> <td>签名错误</td> </tr> <tr> <td>AuthFailure.TokenFailure</td> <td>token 错误</td> </tr> <tr> <td>AuthFailure.InvalidSecretId</td> <td>密钥非法(不是云 API 密钥类型)</td> </tr> </tbody></table> <h2 id="5.-.E7.AD.BE.E5.90.8D.E6.BC.94.E7.A4.BA">5. 签名演示</h2><p>在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 <a href="https://cloud.tencent.com/document/sdk">SDK 中心</a>。当前支持的编程语言有:</p> <ul> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-python">Python</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-java">Java</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-php">PHP</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-go">Go</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-nodejs">NodeJS</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-dotnet">.NET</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-cpp">C++</a></li> <li><a href="https://github.com/TencentCloud/tencentcloud-sdk-ruby">Ruby</a></li> </ul> <p>下面提供了不同产品的生成签名 demo,您可以找到对应的产品参考签名的生成:</p> <ul> <li><a href="https://github.com/TencentCloud/signature-process-demo">Signature Demo</a></li> </ul> <p>为了更清楚的解释签名过程,下面以实际编程语言为例,将上述的签名过程具体实现。请求的域名、调用的接口和参数的取值都以上述签名过程为准,代码只为解释签名过程,并不具备通用性,实际开发请尽量使用 SDK 。</p> <p>最终输出的 url 可能为:<code>https://cvm.tencentcloudapi.com/?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKID********************************&Signature=7RAM2xfNMO9EiVTNmPg06MRnCvQ%3D&Timestamp=1465185768&Version=2017-03-12</code>。</p> <p>注意:由于示例中的密钥是虚构的,时间戳也不是系统当前时间,因此如果将此 url 在浏览器中打开或者用 curl 等命令调用时会返回鉴权错误:签名过期。为了得到一个可以正常返回的 url ,需要修改示例中的 SecretId 和 SecretKey 为真实的密钥,并使用系统当前时间戳作为 Timestamp 。</p> <p>注意:在下面的示例中,不同编程语言,甚至同一语言每次执行得到的 url 可能都有所不同,表现为参数的顺序不同,但这并不影响正确性。只要所有参数都在,且签名计算正确即可。</p> <p>注意:以下代码仅适用于 API 3.0,不能直接用于其他的签名流程,请以对应的实际文档为准。</p> <h3 id="Java">Java</h3><p><pre><code class="language-java"><span class="hljs-keyword">import</span> java.io.UnsupportedEncodingException; <span class="hljs-keyword">import</span> java.net.URLEncoder; <span class="hljs-keyword">import</span> java.util.Random; <span class="hljs-keyword">import</span> java.util.TreeMap; <span class="hljs-keyword">import</span> javax.crypto.Mac; <span class="hljs-keyword">import</span> javax.crypto.spec.SecretKeySpec; <span class="hljs-keyword">import</span> javax.xml.bind.DatatypeConverter; <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">TencentCloudAPIDemo</span> { <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> <span class="hljs-type">String</span> <span class="hljs-variable">CHARSET</span> <span class="hljs-operator">=</span> <span class="hljs-string">"UTF-8"</span>; <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String <span class="hljs-title function_">sign</span><span class="hljs-params">(String s, String key, String method)</span> <span class="hljs-keyword">throws</span> Exception { <span class="hljs-type">Mac</span> <span class="hljs-variable">mac</span> <span class="hljs-operator">=</span> Mac.getInstance(method); <span class="hljs-type">SecretKeySpec</span> <span class="hljs-variable">secretKeySpec</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">SecretKeySpec</span>(key.getBytes(CHARSET), mac.getAlgorithm()); mac.init(secretKeySpec); <span class="hljs-type">byte</span>[] hash = mac.doFinal(s.getBytes(CHARSET)); <span class="hljs-keyword">return</span> DatatypeConverter.printBase64Binary(hash); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String <span class="hljs-title function_">getStringToSign</span><span class="hljs-params">(TreeMap<String, Object> params)</span> { <span class="hljs-type">StringBuilder</span> <span class="hljs-variable">s2s</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">StringBuilder</span>(<span class="hljs-string">"GETcvm.tencentcloudapi.com/?"</span>); <span class="hljs-comment">// 签名时要求对参数进行字典排序,此处用TreeMap保证顺序</span> <span class="hljs-keyword">for</span> (String k : params.keySet()) { s2s.append(k).append(<span class="hljs-string">"="</span>).append(params.get(k).toString()).append(<span class="hljs-string">"&"</span>); } <span class="hljs-keyword">return</span> s2s.toString().substring(<span class="hljs-number">0</span>, s2s.length() - <span class="hljs-number">1</span>); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String <span class="hljs-title function_">getUrl</span><span class="hljs-params">(TreeMap<String, Object> params)</span> <span class="hljs-keyword">throws</span> UnsupportedEncodingException { <span class="hljs-type">StringBuilder</span> <span class="hljs-variable">url</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">StringBuilder</span>(<span class="hljs-string">"https://cvm.tencentcloudapi.com/?"</span>); <span class="hljs-comment">// 实际请求的url中对参数顺序没有要求</span> <span class="hljs-keyword">for</span> (String k : params.keySet()) { <span class="hljs-comment">// 需要对请求串进行urlencode,由于key都是英文字母,故此处仅对其value进行urlencode</span> url.append(k).append(<span class="hljs-string">"="</span>).append(URLEncoder.encode(params.get(k).toString(), CHARSET)).append(<span class="hljs-string">"&"</span>); } <span class="hljs-keyword">return</span> url.toString().substring(<span class="hljs-number">0</span>, url.length() - <span class="hljs-number">1</span>); } <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> <span class="hljs-keyword">throws</span> Exception { TreeMap<String, Object> params = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TreeMap</span><String, Object>(); <span class="hljs-comment">// TreeMap可以自动排序</span> <span class="hljs-comment">// 实际调用时应当使用随机数,例如:params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE));</span> params.put(<span class="hljs-string">"Nonce"</span>, <span class="hljs-number">11886</span>); <span class="hljs-comment">// 公共参数</span> <span class="hljs-comment">// 实际调用时应当使用系统当前时间,例如: params.put("Timestamp", System.currentTimeMillis() / 1000);</span> params.put(<span class="hljs-string">"Timestamp"</span>, <span class="hljs-number">1465185768</span>); <span class="hljs-comment">// 公共参数</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> params.put(<span class="hljs-string">"SecretId"</span>, System.getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>)); <span class="hljs-comment">// 公共参数</span> params.put(<span class="hljs-string">"Action"</span>, <span class="hljs-string">"DescribeInstances"</span>); <span class="hljs-comment">// 公共参数</span> params.put(<span class="hljs-string">"Version"</span>, <span class="hljs-string">"2017-03-12"</span>); <span class="hljs-comment">// 公共参数</span> params.put(<span class="hljs-string">"Region"</span>, <span class="hljs-string">"ap-guangzhou"</span>); <span class="hljs-comment">// 公共参数</span> params.put(<span class="hljs-string">"Limit"</span>, <span class="hljs-number">20</span>); <span class="hljs-comment">// 业务参数</span> params.put(<span class="hljs-string">"Offset"</span>, <span class="hljs-number">0</span>); <span class="hljs-comment">// 业务参数</span> params.put(<span class="hljs-string">"InstanceIds.0"</span>, <span class="hljs-string">"ins-09dx96dg"</span>); <span class="hljs-comment">// 业务参数</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> params.put(<span class="hljs-string">"Signature"</span>, sign(getStringToSign(params), System.getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>), <span class="hljs-string">"HmacSHA1"</span>)); <span class="hljs-comment">// 公共参数</span> System.out.println(getUrl(params)); } }</code></pre> </p> <h3 id="Python">Python</h3><p>注意:如果是在 Python 2 环境中运行,需要先安装 requests 依赖包: <code>pip install requests</code> 。</p> <p><pre><code class="language-python"><span class="hljs-comment"># -*- coding: utf8 -*-</span> <span class="hljs-keyword">import</span> base64 <span class="hljs-keyword">import</span> hashlib <span class="hljs-keyword">import</span> hmac <span class="hljs-keyword">import</span> os <span class="hljs-keyword">import</span> time <span class="hljs-keyword">import</span> requests <span class="hljs-comment"># 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> secret_id = os.environ.get(<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>) <span class="hljs-comment"># 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> secret_key = os.environ.get(<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>) <span class="hljs-keyword">def</span> <span class="hljs-title function_">get_string_to_sign</span>(<span class="hljs-params">method, endpoint, params</span>): s = method + endpoint + <span class="hljs-string">"/?"</span> query_str = <span class="hljs-string">"&"</span>.join(<span class="hljs-string">"%s=%s"</span> % (k, params[k]) <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> <span class="hljs-built_in">sorted</span>(params)) <span class="hljs-keyword">return</span> s + query_str <span class="hljs-keyword">def</span> <span class="hljs-title function_">sign_str</span>(<span class="hljs-params">key, s, method</span>): hmac_str = hmac.new(key.encode(<span class="hljs-string">"utf8"</span>), s.encode(<span class="hljs-string">"utf8"</span>), method).digest() <span class="hljs-keyword">return</span> base64.b64encode(hmac_str) <span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>: endpoint = <span class="hljs-string">"cvm.tencentcloudapi.com"</span> data = { <span class="hljs-string">'Action'</span> : <span class="hljs-string">'DescribeInstances'</span>, <span class="hljs-string">'InstanceIds.0'</span> : <span class="hljs-string">'ins-09dx96dg'</span>, <span class="hljs-string">'Limit'</span> : <span class="hljs-number">20</span>, <span class="hljs-string">'Nonce'</span> : <span class="hljs-number">11886</span>, <span class="hljs-string">'Offset'</span> : <span class="hljs-number">0</span>, <span class="hljs-string">'Region'</span> : <span class="hljs-string">'ap-guangzhou'</span>, <span class="hljs-string">'SecretId'</span> : secret_id, <span class="hljs-string">'Timestamp'</span> : <span class="hljs-number">1465185768</span>, <span class="hljs-comment"># int(time.time())</span> <span class="hljs-string">'Version'</span>: <span class="hljs-string">'2017-03-12'</span> } s = get_string_to_sign(<span class="hljs-string">"GET"</span>, endpoint, data) data[<span class="hljs-string">"Signature"</span>] = sign_str(secret_key, s, hashlib.sha1) <span class="hljs-built_in">print</span>(data[<span class="hljs-string">"Signature"</span>]) <span class="hljs-comment"># 此处会实际调用,成功后可能产生计费</span> <span class="hljs-comment"># resp = requests.get("https://" + endpoint, params=data)</span> <span class="hljs-comment"># print(resp.url)</span></code></pre> </p> <h3 id="Golang">Golang</h3><p><pre><code class="language-go"><span class="hljs-keyword">package</span> main <span class="hljs-keyword">import</span> ( <span class="hljs-string">"bytes"</span> <span class="hljs-string">"crypto/hmac"</span> <span class="hljs-string">"crypto/sha1"</span> <span class="hljs-string">"encoding/base64"</span> <span class="hljs-string">"fmt"</span> <span class="hljs-string">"os"</span> <span class="hljs-string">"sort"</span> <span class="hljs-string">"strconv"</span> ) <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> { <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> secretId := os.Getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>) <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> secretKey := os.Getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>) params := <span class="hljs-keyword">map</span>[<span class="hljs-keyword">string</span>]<span class="hljs-keyword">string</span>{ <span class="hljs-string">"Nonce"</span>: <span class="hljs-string">"11886"</span>, <span class="hljs-string">"Timestamp"</span>: strconv.Itoa(<span class="hljs-number">1465185768</span>), <span class="hljs-string">"Region"</span>: <span class="hljs-string">"ap-guangzhou"</span>, <span class="hljs-string">"SecretId"</span>: secretId, <span class="hljs-string">"Version"</span>: <span class="hljs-string">"2017-03-12"</span>, <span class="hljs-string">"Action"</span>: <span class="hljs-string">"DescribeInstances"</span>, <span class="hljs-string">"InstanceIds.0"</span>: <span class="hljs-string">"ins-09dx96dg"</span>, <span class="hljs-string">"Limit"</span>: strconv.Itoa(<span class="hljs-number">20</span>), <span class="hljs-string">"Offset"</span>: strconv.Itoa(<span class="hljs-number">0</span>), } <span class="hljs-keyword">var</span> buf bytes.Buffer buf.WriteString(<span class="hljs-string">"GET"</span>) buf.WriteString(<span class="hljs-string">"cvm.tencentcloudapi.com"</span>) buf.WriteString(<span class="hljs-string">"/"</span>) buf.WriteString(<span class="hljs-string">"?"</span>) <span class="hljs-comment">// sort keys by ascii asc order</span> keys := <span class="hljs-built_in">make</span>([]<span class="hljs-keyword">string</span>, <span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(params)) <span class="hljs-keyword">for</span> k, _ := <span class="hljs-keyword">range</span> params { keys = <span class="hljs-built_in">append</span>(keys, k) } sort.Strings(keys) <span class="hljs-keyword">for</span> i := <span class="hljs-keyword">range</span> keys { k := keys[i] buf.WriteString(k) buf.WriteString(<span class="hljs-string">"="</span>) buf.WriteString(params[k]) buf.WriteString(<span class="hljs-string">"&"</span>) } buf.Truncate(buf.Len() - <span class="hljs-number">1</span>) hashed := hmac.New(sha1.New, []<span class="hljs-keyword">byte</span>(secretKey)) hashed.Write(buf.Bytes()) fmt.Println(base64.StdEncoding.EncodeToString(hashed.Sum(<span class="hljs-literal">nil</span>))) }</code></pre> </p> <h3 id="PHP">PHP</h3><p><pre><code class="language-php"><span class="hljs-meta"><?php</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> <span class="hljs-variable">$secretId</span> = getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>); <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> <span class="hljs-variable">$secretKey</span> = getenv(<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>); <span class="hljs-variable">$param</span>[<span class="hljs-string">"Nonce"</span>] = <span class="hljs-number">11886</span>;<span class="hljs-comment">//rand();</span> <span class="hljs-variable">$param</span>[<span class="hljs-string">"Timestamp"</span>] = <span class="hljs-number">1465185768</span>;<span class="hljs-comment">//time();</span> <span class="hljs-variable">$param</span>[<span class="hljs-string">"Region"</span>] = <span class="hljs-string">"ap-guangzhou"</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"SecretId"</span>] = <span class="hljs-variable">$secretId</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"Version"</span>] = <span class="hljs-string">"2017-03-12"</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"Action"</span>] = <span class="hljs-string">"DescribeInstances"</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"InstanceIds.0"</span>] = <span class="hljs-string">"ins-09dx96dg"</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"Limit"</span>] = <span class="hljs-number">20</span>; <span class="hljs-variable">$param</span>[<span class="hljs-string">"Offset"</span>] = <span class="hljs-number">0</span>; ksort(<span class="hljs-variable">$param</span>); <span class="hljs-variable">$signStr</span> = <span class="hljs-string">"GETcvm.tencentcloudapi.com/?"</span>; <span class="hljs-keyword">foreach</span> ( <span class="hljs-variable">$param</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$key</span> => <span class="hljs-variable">$value</span> ) { <span class="hljs-variable">$signStr</span> = <span class="hljs-variable">$signStr</span> . <span class="hljs-variable">$key</span> . <span class="hljs-string">"="</span> . <span class="hljs-variable">$value</span> . <span class="hljs-string">"&"</span>; } <span class="hljs-variable">$signStr</span> = substr(<span class="hljs-variable">$signStr</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>); <span class="hljs-variable">$signature</span> = base64_encode(hash_hmac(<span class="hljs-string">"sha1"</span>, <span class="hljs-variable">$signStr</span>, <span class="hljs-variable">$secretKey</span>, <span class="hljs-literal">true</span>)); <span class="hljs-keyword">echo</span> <span class="hljs-variable">$signature</span>.PHP_EOL; <span class="hljs-comment">// need to install and enable curl extension in php.ini</span> <span class="hljs-comment">// $param["Signature"] = $signature;</span> <span class="hljs-comment">// $url = "https://cvm.tencentcloudapi.com/?".http_build_query($param);</span> <span class="hljs-comment">// echo $url.PHP_EOL;</span> <span class="hljs-comment">// $ch = curl_init();</span> <span class="hljs-comment">// curl_setopt($ch, CURLOPT_URL, $url);</span> <span class="hljs-comment">// $output = curl_exec($ch);</span> <span class="hljs-comment">// curl_close($ch);</span> <span class="hljs-comment">// echo json_decode($output);</span></code></pre> </p> <h3 id="Ruby">Ruby</h3><p><pre><code class="language-ruby"><span class="hljs-comment"># -*- coding: UTF-8 -*-</span> <span class="hljs-comment"># require ruby>=2.3.0</span> <span class="hljs-keyword">require</span> <span class="hljs-string">'time'</span> <span class="hljs-keyword">require</span> <span class="hljs-string">'openssl'</span> <span class="hljs-keyword">require</span> <span class="hljs-string">'base64'</span> <span class="hljs-comment"># 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> secret_id = ENV[<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>] <span class="hljs-comment"># 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> secret_key = ENV[<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>] method = <span class="hljs-string">'GET'</span> endpoint = <span class="hljs-string">'cvm.tencentcloudapi.com'</span> data = { <span class="hljs-string">'Action'</span> => <span class="hljs-string">'DescribeInstances'</span>, <span class="hljs-string">'InstanceIds.0'</span> => <span class="hljs-string">'ins-09dx96dg'</span>, <span class="hljs-string">'Limit'</span> => <span class="hljs-number">20</span>, <span class="hljs-string">'Nonce'</span> => <span class="hljs-number">11886</span>, <span class="hljs-string">'Offset'</span> => <span class="hljs-number">0</span>, <span class="hljs-string">'Region'</span> => <span class="hljs-string">'ap-guangzhou'</span>, <span class="hljs-string">'SecretId'</span> => secret_id, <span class="hljs-string">'Timestamp'</span> => <span class="hljs-number">1465185768</span>, <span class="hljs-comment"># Time.now.to_i</span> <span class="hljs-string">'Version'</span> => <span class="hljs-string">'2017-03-12'</span>, } sign = method + endpoint + <span class="hljs-string">'/?'</span> params = [] data.sort.each <span class="hljs-keyword">do</span> <span class="hljs-params">|item|</span> params << <span class="hljs-string">"<span class="hljs-subst">#{item[<span class="hljs-number">0</span>]}</span>=<span class="hljs-subst">#{item[<span class="hljs-number">1</span>]}</span>"</span> <span class="hljs-keyword">end</span> sign += params.join(<span class="hljs-string">'&'</span>) digest = OpenSSL::Digest.new(<span class="hljs-string">'sha1'</span>) data[<span class="hljs-string">'Signature'</span>] = Base64.encode64(OpenSSL::HMAC.digest(digest, secret_key, sign)) puts data[<span class="hljs-string">'Signature'</span>] <span class="hljs-comment"># require 'net/http'</span> <span class="hljs-comment"># uri = URI('https://' + endpoint)</span> <span class="hljs-comment"># uri.query = URI.encode_www_form(data)</span> <span class="hljs-comment"># p uri</span> <span class="hljs-comment"># res = Net::HTTP.get_response(uri)</span> <span class="hljs-comment"># puts res.body</span></code></pre> </p> <h3 id="DotNet">DotNet</h3><p><pre><code class="language-csharp"><span class="hljs-keyword">using</span> System; <span class="hljs-keyword">using</span> System.Collections.Generic; <span class="hljs-keyword">using</span> System.Net; <span class="hljs-keyword">using</span> System.Security.Cryptography; <span class="hljs-keyword">using</span> System.Text; <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> { <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-built_in">string</span> <span class="hljs-title">Sign</span>(<span class="hljs-params"><span class="hljs-built_in">string</span> signKey, <span class="hljs-built_in">string</span> secret</span>)</span> { <span class="hljs-built_in">string</span> signRet = <span class="hljs-built_in">string</span>.Empty; <span class="hljs-keyword">using</span> (HMACSHA1 mac = <span class="hljs-keyword">new</span> HMACSHA1(Encoding.UTF8.GetBytes(signKey))) { <span class="hljs-built_in">byte</span>[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(secret)); signRet = Convert.ToBase64String(hash); } <span class="hljs-keyword">return</span> signRet; } <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-built_in">string</span> <span class="hljs-title">MakeSignPlainText</span>(<span class="hljs-params">SortedDictionary<<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>> requestParams, <span class="hljs-built_in">string</span> requestMethod, <span class="hljs-built_in">string</span> requestHost, <span class="hljs-built_in">string</span> requestPath</span>)</span> { <span class="hljs-built_in">string</span> retStr = <span class="hljs-string">""</span>; retStr += requestMethod; retStr += requestHost; retStr += requestPath; retStr += <span class="hljs-string">"?"</span>; <span class="hljs-built_in">string</span> v = <span class="hljs-string">""</span>; <span class="hljs-keyword">foreach</span> (<span class="hljs-built_in">string</span> key <span class="hljs-keyword">in</span> requestParams.Keys) { v += <span class="hljs-built_in">string</span>.Format(<span class="hljs-string">"{0}={1}&"</span>, key, requestParams[key]); } retStr += v.TrimEnd(<span class="hljs-string">'&'</span>); <span class="hljs-keyword">return</span> retStr; } <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Main</span>(<span class="hljs-params"><span class="hljs-built_in">string</span>[] args</span>)</span> { <span class="hljs-comment">// 密钥参数</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> <span class="hljs-built_in">string</span> SECRET_ID = Environment.GetEnvironmentVariable(<span class="hljs-string">"TENCENTCLOUD_SECRET_ID"</span>); <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> <span class="hljs-built_in">string</span> SECRET_KEY = Environment.GetEnvironmentVariable(<span class="hljs-string">"TENCENTCLOUD_SECRET_KEY"</span>); <span class="hljs-built_in">string</span> endpoint = <span class="hljs-string">"cvm.tencentcloudapi.com"</span>; <span class="hljs-built_in">string</span> region = <span class="hljs-string">"ap-guangzhou"</span>; <span class="hljs-built_in">string</span> action = <span class="hljs-string">"DescribeInstances"</span>; <span class="hljs-built_in">string</span> version = <span class="hljs-string">"2017-03-12"</span>; <span class="hljs-built_in">double</span> RequestTimestamp = <span class="hljs-number">1465185768</span>; <span class="hljs-comment">// 时间戳 2019-02-26 00:44:25,此参数作为示例,以实际为准</span> <span class="hljs-comment">// long timestamp = ToTimestamp() / 1000;</span> <span class="hljs-comment">// string requestTimestamp = timestamp.ToString();</span> Dictionary<<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>> param = <span class="hljs-keyword">new</span> Dictionary<<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>>(); param.Add(<span class="hljs-string">"Limit"</span>, <span class="hljs-string">"20"</span>); param.Add(<span class="hljs-string">"Offset"</span>, <span class="hljs-string">"0"</span>); param.Add(<span class="hljs-string">"InstanceIds.0"</span>, <span class="hljs-string">"ins-09dx96dg"</span>); param.Add(<span class="hljs-string">"Action"</span>, action); param.Add(<span class="hljs-string">"Nonce"</span>, <span class="hljs-string">"11886"</span>); <span class="hljs-comment">// param.Add("Nonce", Math.Abs(new Random().Next()).ToString());</span> param.Add(<span class="hljs-string">"Timestamp"</span>, RequestTimestamp.ToString()); param.Add(<span class="hljs-string">"Version"</span>, version); param.Add(<span class="hljs-string">"SecretId"</span>, SECRET_ID); param.Add(<span class="hljs-string">"Region"</span>, region); SortedDictionary<<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>> headers = <span class="hljs-keyword">new</span> SortedDictionary<<span class="hljs-built_in">string</span>, <span class="hljs-built_in">string</span>>(param, StringComparer.Ordinal); <span class="hljs-built_in">string</span> sigInParam = MakeSignPlainText(headers, <span class="hljs-string">"GET"</span>, endpoint, <span class="hljs-string">"/"</span>); <span class="hljs-built_in">string</span> sigOutParam = Sign(SECRET_KEY, sigInParam); Console.WriteLine(sigOutParam); } }</code></pre> </p> <h3 id="NodeJS">NodeJS</h3><p><pre><code class="language-javascript"><span class="hljs-keyword">const</span> crypto = <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto'</span>); <span class="hljs-keyword">function</span> <span class="hljs-title function_">get_req_url</span>(<span class="hljs-params">params, endpoint</span>){ params[<span class="hljs-string">'Signature'</span>] = <span class="hljs-built_in">encodeURIComponent</span>(params[<span class="hljs-string">'Signature'</span>]); <span class="hljs-keyword">const</span> url_strParam = <span class="hljs-title function_">sort_params</span>(params) <span class="hljs-keyword">return</span> <span class="hljs-string">"https://"</span> + endpoint + <span class="hljs-string">"/?"</span> + url_strParam.<span class="hljs-title function_">slice</span>(<span class="hljs-number">1</span>); } <span class="hljs-keyword">function</span> <span class="hljs-title function_">formatSignString</span>(<span class="hljs-params">reqMethod, endpoint, path, strParam</span>){ <span class="hljs-keyword">let</span> strSign = reqMethod + endpoint + path + <span class="hljs-string">"?"</span> + strParam.<span class="hljs-title function_">slice</span>(<span class="hljs-number">1</span>); <span class="hljs-keyword">return</span> strSign; } <span class="hljs-keyword">function</span> <span class="hljs-title function_">sha1</span>(<span class="hljs-params">secretKey, strsign</span>){ <span class="hljs-keyword">let</span> signMethodMap = {<span class="hljs-string">'HmacSHA1'</span>: <span class="hljs-string">"sha1"</span>}; <span class="hljs-keyword">let</span> hmac = crypto.<span class="hljs-title function_">createHmac</span>(signMethodMap[<span class="hljs-string">'HmacSHA1'</span>], secretKey || <span class="hljs-string">""</span>); <span class="hljs-keyword">return</span> hmac.<span class="hljs-title function_">update</span>(<span class="hljs-title class_">Buffer</span>.<span class="hljs-title function_">from</span>(strsign, <span class="hljs-string">'utf8'</span>)).<span class="hljs-title function_">digest</span>(<span class="hljs-string">'base64'</span>) } <span class="hljs-keyword">function</span> <span class="hljs-title function_">sort_params</span>(<span class="hljs-params">params</span>){ <span class="hljs-keyword">let</span> strParam = <span class="hljs-string">""</span>; <span class="hljs-keyword">let</span> keys = <span class="hljs-title class_">Object</span>.<span class="hljs-title function_">keys</span>(params); keys.<span class="hljs-title function_">sort</span>(); <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> k <span class="hljs-keyword">in</span> keys) { <span class="hljs-comment">//k = k.replace(/_/g, '.');</span> strParam += (<span class="hljs-string">"&"</span> + keys[k] + <span class="hljs-string">"="</span> + params[keys[k]]); } <span class="hljs-keyword">return</span> strParam } <span class="hljs-keyword">function</span> <span class="hljs-title function_">main</span>(<span class="hljs-params"></span>){ <span class="hljs-comment">// 密钥参数</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************</span> <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">SECRET_ID</span> = process.<span class="hljs-property">env</span>.<span class="hljs-property">TENCENTCLOUD_SECRET_ID</span> <span class="hljs-comment">// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************</span> <span class="hljs-keyword">const</span> <span class="hljs-variable constant_">SECRET_KEY</span> = process.<span class="hljs-property">env</span>.<span class="hljs-property">TENCENTCLOUD_SECRET_KEY</span> <span class="hljs-keyword">const</span> endpoint = <span class="hljs-string">"cvm.tencentcloudapi.com"</span> <span class="hljs-keyword">const</span> <span class="hljs-title class_">Region</span> = <span class="hljs-string">"ap-guangzhou"</span> <span class="hljs-keyword">const</span> <span class="hljs-title class_">Version</span> = <span class="hljs-string">"2017-03-12"</span> <span class="hljs-keyword">const</span> <span class="hljs-title class_">Action</span> = <span class="hljs-string">"DescribeInstances"</span> <span class="hljs-keyword">const</span> <span class="hljs-title class_">Timestamp</span> = <span class="hljs-number">1465185768</span> <span class="hljs-comment">// 时间戳 2016-06-06 12:02:48, 此参数作为示例,以实际为准</span> <span class="hljs-comment">// const Timestamp = Math.round(Date.now() / 1000)</span> <span class="hljs-keyword">const</span> <span class="hljs-title class_">Nonce</span> = <span class="hljs-number">11886</span> <span class="hljs-comment">// 随机正整数</span> <span class="hljs-comment">//const nonce = Math.round(Math.random() * 65535)</span> <span class="hljs-keyword">let</span> params = {}; params[<span class="hljs-string">'Action'</span>] = <span class="hljs-title class_">Action</span>; params[<span class="hljs-string">'InstanceIds.0'</span>] = <span class="hljs-string">'ins-09dx96dg'</span>; params[<span class="hljs-string">'Limit'</span>] = <span class="hljs-number">20</span>; params[<span class="hljs-string">'Offset'</span>] = <span class="hljs-number">0</span>; params[<span class="hljs-string">'Nonce'</span>] = <span class="hljs-title class_">Nonce</span>; params[<span class="hljs-string">'Region'</span>] = <span class="hljs-title class_">Region</span>; params[<span class="hljs-string">'SecretId'</span>] = <span class="hljs-variable constant_">SECRET_ID</span>; params[<span class="hljs-string">'Timestamp'</span>] = <span class="hljs-title class_">Timestamp</span>; params[<span class="hljs-string">'Version'</span>] = <span class="hljs-title class_">Version</span>; <span class="hljs-comment">// 1. 对参数排序,并拼接请求字符串</span> strParam = <span class="hljs-title function_">sort_params</span>(params) <span class="hljs-comment">// 2. 拼接签名原文字符串</span> <span class="hljs-keyword">const</span> reqMethod = <span class="hljs-string">"GET"</span>; <span class="hljs-keyword">const</span> path = <span class="hljs-string">"/"</span>; strSign = <span class="hljs-title function_">formatSignString</span>(reqMethod, endpoint, path, strParam) <span class="hljs-comment">// console.log(strSign)</span> <span class="hljs-comment">// 3. 生成签名串</span> params[<span class="hljs-string">'Signature'</span>] = <span class="hljs-title function_">sha1</span>(<span class="hljs-variable constant_">SECRET_KEY</span>, strSign) <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(params[<span class="hljs-string">'Signature'</span>]) <span class="hljs-comment">// 4. 进行url编码并拼接请求url</span> <span class="hljs-comment">// const req_url = get_req_url(params, endpoint)</span> <span class="hljs-comment">// console.log(params['Signature'])</span> <span class="hljs-comment">// console.log(req_url)</span> } <span class="hljs-title function_">main</span>()</code></pre> </p> </div></div></div><script type="text/template" id="codeTemplate" data-type="code"> <div class="rno-code-wrap"> <div class="rno-code J-markdownCode"> <div class="rno-code-hd"> <ul class="rno-code-tab J-language"> <!--展示语言列表--> </ul> </div> <div class="rno-code-bd markdown-code-bd J-codeBox"> <div class="rno-code-toolbars J-codeToolbar"> <a data-bypass-xhr="1" class="rno-code-toolbars-copy J-copyContent"></a> <div class="code-dropdown code-dropdown-align-center J-copy-tips"> <div class="code-dropdown-inner"> <div class="code-dropdown-text">复制</div> </div> </div> <div class="code-dropdown code-dropdown-align-center J-copy-success"> <div class="code-dropdown-inner"> <div class="code-dropdown-text">复制成功</div> </div> </div> </div> </div> </div> </div> </script></div><div class="doc-pages J-docDetailPagination"><a href="/document/api/849/52014" class="prev J-docDetailPaginationPage" hotrep="document.detail.previous" title="上一篇: 签名方法 v3">上一篇<!-- -->: <!-- -->签名方法 v3</a><a href="/document/api/849/52016" class="next J-docDetailPaginationPage" hotrep="document.detail.next" title="下一篇: 返回结果">下一篇<!-- -->: <!-- -->返回结果</a></div><div id="document-feedback-container" class="document-feedback-container"></div><div class="J-relatedArticleLayout" data-title="API 中心"></div><div class="J-featuredFeedbackLayout" style="margin-top:20px"></div></div></div></div></div></div></div></div></div></div><div id="J-viewLargeImageBox" data-mode="pc" class="zoom-mask" style="display:none;width:100%;height:100%"><div class="zoom-close"></div><div class="zoom-wrap"><img/></div></div><div class="qcc-footer-s footer-pc J-qc-footer" data-type="cn_zh"><div class="c-footer-inner"><div class="c-footer-blogroll-main"><nav class="c-footer-blogroll-links copyright"><span class="slide">Copyright © 2013<!-- -->-2025<!-- --> Tencent Cloud. All Rights Reserved.<span> 腾讯云 版权所有</span></span><br/><a href="https://qcloudimg.tencent-cloud.cn/raw/986376a919726e0c35e96b311f54184d.jpg" target="_blank" class="slide slide-ct" style="margin-right:5px">深圳市腾讯计算机系统有限公司</a><span style="margin-right:0" class="slide">ICP备案/许可证号:</span><a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" rel="nofollow" class="slide slide-ct" hotrep="hp.footer.bottom.miitbeian" style="margin-right:5px">粤B2-20090059</a><a href="https://beian.mps.gov.cn/#/query/webSearch?code=44030502008569" target="_blank" rel="nofollow" class="slide slide-ct" hotrep="hp.footer.bottom.beian" style="display:inline-flex;align-items:center"><img style="width:14px;margin-right:5px" src="https://qcloudimg.tencent-cloud.cn/raw/eed02831a0e201b8d794c8282c40cf2e.png"/><span>粤公网安备44030502008569号</span></a><br/><a href="https://qcloudimg.tencent-cloud.cn/raw/a2390663ee4a95ceeead8fdc34d4b207.jpg" target="_blank" class="slide slide-ct" style="margin-right:5px">腾讯云计算(北京)有限责任公司</a><span style="margin-right:0" class="slide">京ICP证150476号 | </span><a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" rel="nofollow" class="slide slide-ct" hotrep="hp.footer.bottom.miitbeian">京ICP备11018762号</a></nav></div><div class="c-footer-blogroll-extra"><div class="c-footer-select J-qcRegionSelector"><a class="c-footer-select-trigger J-qcRegionTrigger"><i class="icon"></i>中国站</a><div class="c-footer-dropdown J-qcFooterRegionList"><ul class="c-footer-dropdown-menu"><li class="actived"><a class="J-qcRegionOption" data-region="cn_zh" hotrep="hp.footer.region.cn">中文</a></li><li><a class="J-qcRegionOption" data-region="intl" href="https://www.tencentcloud.com/">International</a></li></ul></div></div></div></div></div><div class="qc-scrollbar rno-scrollbar-tools rno-documents-tools J-qc-scrollbar"><div class="qc-scrollbar-inner rno-scrollbar-tools-inner"><div class="qc-scrollbar-item qc-scrollbar-document rno-scrollbar-tools-item rno-scrollbar-tools-document rno-scrollbar-tools-service gift-mod" id="sidebar-feedback-container"><div class="qc-scrollbar-button qc-scrollbar-toggle is-active rno-scrollbar-tools-button rno-scrollbar-tools-toggle rno-documents-tools-gift hover J-btnDocFeedback" hotrep="hp.sidebar.document" style="border-color:#e1e8f0;line-height:14px"><span style="color:white"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.64718 4.62672L7.92448 3.37497C7.08071 1.91352 5.21196 1.41279 3.75051 2.25656C2.34597 3.06747 1.82878 4.82509 2.53962 6.25803L0 6.25803V12.9247H1.66667V19.5914H3.33333V19.6079H5.55556V17.3857H3.88889V12.9247H7.77778V10.7025H2.22222V8.48025L14.7696 8.48025L7.77778 15.6906V19.5914H17.7778V17.3691H13.8333L20 11.0097L17.7778 8.78747V6.25803H14.7547C15.4656 4.82509 14.9484 3.06747 13.5438 2.25656C12.0824 1.41279 10.2136 1.91352 9.36987 3.37497L8.64718 4.62672ZM12.1958 6.25803L12.7378 5.31941C12.9679 4.92084 12.8313 4.41118 12.4327 4.18106C12.0342 3.95094 11.5245 4.0875 11.2944 4.48608L10.2713 6.25803H12.1958ZM7.02301 6.25803L5.99998 4.48608C5.76986 4.0875 5.2602 3.95094 4.86162 4.18106C4.46304 4.41118 4.32648 4.92084 4.5566 5.31941L5.09851 6.25803H7.02301ZM10 16.5911L13.2194 13.2711L13.977 14.0287L10.7379 17.3691L10 17.3691L10 16.5911ZM14.7666 11.6756L15.5242 12.4332L16.8813 11.0337L16.1237 10.2761L14.7666 11.6756Z" fill="currentColor"></path></svg></span><span class="qc-scrollbar-button-desc rno-scrollbar-tools-button-desc">有奖反馈</span></div></div><div class="qc-scrollbar-item qc-scrollbar-document rno-scrollbar-tools-item rno-scrollbar-tools-service rno-scrollbar-tools-document gift-mod J-gitMod"><div class="rno-scrollbar-tools-button rno-scrollbar-tools-toggle" hotrep="hp.sidebar.document" style="padding-top:12px;padding-bottom:12px;padding-left:0;padding-right:0;display:none"><img class="rno-scrollbar-tools-icon" src="https://main.qcloudimg.com/raw/07e6c1149bdbaa766dcd7c4e2b9a5886/gift-blue.svg" style="vertical-align:top" alt=""/></div><div class="rno-scrollbar-tools-button rno-scrollbar-tools-toggle rno-documents-tools-gift J-btnDocInvestigate" hotrep="hp.sidebar.document.act" style="background-color:#fff;border:;color:#00a4ff;line-height:14px"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 3.71924H16V17.7192H2V3.71924Z" stroke="currentColor" stroke-width="2"></path><rect x="1" y="8" width="16" height="2" fill="currentColor"></rect><rect x="10.75" y="12.4692" width="1.5" height="1.5" stroke="currentColor" stroke-width="1.5"></rect><rect x="5" y="0.719238" width="2" height="5" fill="currentColor"></rect><rect x="11" y="0.719238" width="2" height="5" fill="currentColor"></rect></svg><span class="qc-scrollbar-button-desc rno-scrollbar-tools-button-desc">文档活动</span></div><div class="J-hoverPanel" style="z-index:8;bottom:0;right:43px;padding-right:12px;position:absolute;display:none"><div class="rno-scrollbar-tools-bubble" style="position:static"><div class="rno-scrollbar-tools-bubble-inner"><div class="rno-scrollbar-tools-bubble-item"><a href="https://cloud.tencent.com/developer/article/1610407" hotrep="hp.sidebar.document.link1" target="_blank"><div class="rno-scrollbar-tools-bubble-head"><img class="rno-scrollbar-tools-bubble-icon" src="https://main.qcloudimg.com/raw/9674b05080ea616c61aabd5c9f7e7e0e.svg" alt=""/><img class="rno-scrollbar-tools-bubble-icon-hover" src="https://main.qcloudimg.com/raw/fe4d466f3ec44efd1ae62b6eee8c0b5f.svg" alt=""/><span class="rno-scrollbar-tools-bubble-title">文档“捉虫”活动</span></div><div class="rno-scrollbar-tools-bubble-desc">检视指定产品文档,发现和反馈有效问题,奖!</div></a></div><div class="rno-scrollbar-tools-bubble-item"><a href="https://cloud.tencent.com/developer/article/1630768" hotrep="hp.sidebar.document.link2" target="_blank"><div class="rno-scrollbar-tools-bubble-head"><img class="rno-scrollbar-tools-bubble-icon" src="https://main.qcloudimg.com/raw/bc8e0cd020e9b96a8e61319d2f145f15.svg" alt=""/><img class="rno-scrollbar-tools-bubble-icon-hover" src="https://main.qcloudimg.com/raw/d46e0544ea9b8962405e6b9febcbdaf5.svg" alt=""/><span class="rno-scrollbar-tools-bubble-title">API专项"捉虫"</span></div><div class="rno-scrollbar-tools-bubble-desc">反馈API文档问题,代金券、周边好礼奖不停!</div></a></div><div class="rno-scrollbar-tools-bubble-item"><a href="https://cloud.tencent.com/developer/article/1523112" hotrep="hp.sidebar.document.link3" target="_blank"><div class="rno-scrollbar-tools-bubble-head"><img class="rno-scrollbar-tools-bubble-icon" src="https://main.qcloudimg.com/raw/d5783f8d104e1d25a658df1685b087c2.svg" alt=""/><img class="rno-scrollbar-tools-bubble-icon-hover" src="https://main.qcloudimg.com/raw/bd063d4ae54dcf48a69edc3a822b26a9.svg" alt=""/><span class="rno-scrollbar-tools-bubble-title">文档建议,你提了吗</span></div><div class="rno-scrollbar-tools-bubble-desc">快来使用腾讯云产品文档,提出有效建议,奖!</div></a></div></div></div></div></div><div class="qc-scrollbar-item rno-scrollbar-tools-item rno-scrollbar-tools-service J-connectUsBlock"><a class="rno-scrollbar-tools-button rno-scrollbar-tools-toggle J-btnConnectUs" hotrep="hp.sidebar.connectus" title="联系我们" style="text-decoration:none"><img class="rno-scrollbar-tools-icon qc-scrollbar-icon" src="https://main.qcloudimg.com/raw/3bc4782fbfb8375d9a4e54e481298f82/message.svg" alt="message-icon"/><span class="rno-scrollbar-tools-button-desc qc-scrollbar-button-desc J-scrollbar-button-connect-us">联系我们</span></a><div class="J-expandPanel" style="z-index:6;bottom:0;right:43px;padding-right:12px;position:absolute;display:none"><div class="rno-scrollbar-tools-bubble" style="position:static"><div class="rno-scrollbar-tools-bubble-inner"><div class="rno-scrollbar-tools-bubble-item"><a class="J-presale-smartServiceLink" href="https://cloud.tencent.com/online-service?source=PRESALE&from=connect-us" target="_blank"><div class="rno-scrollbar-tools-bubble-head"><img class="rno-scrollbar-tools-bubble-icon " src="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/images/pre-sales.44dccbb4.svg" alt="service-icon"/><img class="rno-scrollbar-tools-bubble-icon-hover" src="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/images/pre-sales-hover.9b27e3e9.svg" alt="service-hover-icon"/><span class="rno-scrollbar-tools-bubble-title">售前咨询</span></div><div class="rno-scrollbar-tools-bubble-desc">专属客户经理在线解答,提供专业的上云方案</div></a></div><div class="rno-scrollbar-tools-bubble-item"><a class="J-smartServiceLink" href="https://cloud.tencent.com/act/event/Online_service?from=connect-us" target="_blank"><div class="rno-scrollbar-tools-bubble-head"><img class="rno-scrollbar-tools-bubble-icon " src="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/images/message.ab26a8d5.svg" alt="service-icon"/><img class="rno-scrollbar-tools-bubble-icon-hover" src="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/images/message-hover.93a6b104.svg" alt="service-hover-icon"/><span class="rno-scrollbar-tools-bubble-title">售后支持</span></div><div class="rno-scrollbar-tools-bubble-desc">7*24获取专业工程师的帮助,快速解决您的问题</div></a></div><div class="rno-scrollbar-tools-bubble-item"><div class="rno-scrollbar-tools-bubble-more"><a class="J-connectUsLink" href="https://cloud.tencent.com/act/event/connect-service?from=connect-us" target="_blank">查看更多联系、反馈方式 ></a></div></div></div></div></div><div class="rno-scrollbar-tools-bubble-m J-expandPanelM" style="z-index:6;top:-126px;right:4px;display:none;background:white"><div class="rno-scrollbar-tools-bubble-m-inner"><a class="rno-scrollbar-tools-bubble-m-item J-smartServiceLink" href="https://cloud.tencent.com/act/event/Online_service" target="_blank"><div class="rno-scrollbar-tools-bubble-m-head"><img class="rno-scrollbar-tools-bubble-icon-m" src="https://main.qcloudimg.com/raw/9c5843fbbc8e89caa61a727b76e50303/service.svg" alt=""/><span class="rno-scrollbar-tools-bubble-m-title">在线客服</span></div><div class="rno-scrollbar-tools-bubble-m-desc">智能诊断,即时回复</div></a><div class="rno-scrollbar-tools-bubble-m-item"><div class="rno-scrollbar-tools-bubble-m-more"><a href="https://cloud.tencent.com/act/event/connect-service" target="_blank">查看更多联系 ></a></div></div></div></div></div><div class="rno-scrollbar-tools-item rno-scrollbar-tools-document rno-scrollbar-tools-service J-scrollbarTOC"><div class="rno-scrollbar-tools-button rno-scrollbar-tools-toggle rno-documents-tools-catalog" style="position:relative;margin-right:8px"><span class="rno-scrollbar-tools-button-desc">目录</span><div class="J-hoverPanel" style="position:absolute;z-index:6;bottom:42px;padding-bottom:8px;left:-1px;white-space:nowrap;text-align:left;display:none"><div class="rno-scrollbar-tools-bubble rno-scrollbar-toc-layer" style="position:static"><div class="rno-scrollbar-toc-wrap"><dl class="rno-scrollbar-toc-dl J-scrollbarTocList"></dl></div></div></div></div></div></div></div><a style="display:none" class="qc-back2top J-qc-back2top" title="返回顶部">返回顶部</a><script nonce="the-nonce">window.__staticRouterHydrationData = JSON.parse("{\"loaderData\":{\"0\":null,\"api\":{\"data\":{\"hotTips\":{\"activityName\":\"开发与运维产品文档捉虫活动邀您参加!\u003e\",\"link\":\"https://cloud.tencent.com/document/product/855/115982\",\"tipTag\":\"HOT\",\"enable\":true},\"meta\":{\"routebase\":\"/document\",\"module\":\"api\"},\"category\":{\"title\":\"API 中心\",\"description\":\"腾讯云 API 已全面升级到 API 3.0,实现多地域部署,支持就近接入,访问时延显著下降,接口设计标准规范,接口文档详细全面,开发者工具丰富易用,能让您方便快捷地使用腾讯云产品。\\n2023年1月1日起对于新增用户已停止旧版本API 2.0接口服务,对于存量用户预计2023年3月31日停止服务。请还在使用 API 2.0 的用户尽快迁移至 API 3.0,以获得更好的服务和体验。\",\"url\":\"/document/api\",\"module\":\"api\"},\"sidebar\":{\"title\":\"API 中心\",\"entry\":\"/document/api\",\"catalogue\":{\"docType\":\"api\",\"lang\":\"zh\",\"list\":[{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云服务器\",\"weight\":300,\"id\":213,\"children\":[],\"rootId\":7217,\"type\":\"directory\",\"link\":\"/document/api/213\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云硬盘\",\"weight\":280,\"id\":362,\"children\":[],\"rootId\":7234,\"type\":\"directory\",\"link\":\"/document/api/362\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"容器服务\",\"weight\":240,\"id\":457,\"children\":[],\"rootId\":6787,\"type\":\"directory\",\"link\":\"/document/api/457\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"负载均衡\",\"weight\":230,\"id\":214,\"children\":[],\"rootId\":7219,\"type\":\"directory\",\"link\":\"/document/api/214\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"弹性伸缩\",\"weight\":230,\"id\":377,\"children\":[],\"rootId\":7235,\"type\":\"directory\",\"link\":\"/document/api/377\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云函数\",\"weight\":220,\"id\":583,\"children\":[],\"rootId\":9741,\"type\":\"directory\",\"link\":\"/document/api/583\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"私有网络\",\"weight\":220,\"id\":215,\"children\":[],\"rootId\":7220,\"type\":\"directory\",\"link\":\"/document/api/215\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"批量计算\",\"weight\":210,\"id\":599,\"children\":[],\"rootId\":10405,\"type\":\"directory\",\"link\":\"/document/api/599\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"专线接入\",\"weight\":210,\"id\":216,\"children\":[],\"rootId\":7366,\"type\":\"directory\",\"link\":\"/document/api/216\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"API 网关\",\"weight\":210,\"id\":628,\"children\":[],\"rootId\":14807,\"type\":\"directory\",\"link\":\"/document/api/628\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"对象存储\",\"weight\":200,\"id\":436,\"children\":[],\"rootId\":10009,\"type\":\"directory\",\"link\":\"/document/api/436\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"微服务平台 TSF\",\"weight\":200,\"id\":649,\"children\":[],\"rootId\":35431,\"type\":\"directory\",\"link\":\"/document/api/649\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"文件存储\",\"weight\":195,\"id\":582,\"children\":[],\"rootId\":13224,\"type\":\"directory\",\"link\":\"/document/api/582\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"消息队列 CKafka 版\",\"weight\":180,\"id\":597,\"children\":[],\"rootId\":10075,\"type\":\"directory\",\"link\":\"/document/api/597\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"全站加速网络\",\"weight\":180,\"id\":570,\"children\":[],\"rootId\":13922,\"type\":\"directory\",\"link\":\"/document/api/570\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"日志服务\",\"weight\":175,\"id\":614,\"children\":[],\"rootId\":11321,\"type\":\"directory\",\"link\":\"/document/api/614\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 MySQL\",\"weight\":170,\"id\":236,\"children\":[],\"rootId\":7221,\"type\":\"directory\",\"link\":\"/document/api/236\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 MariaDB\",\"weight\":168,\"id\":237,\"children\":[],\"rootId\":7232,\"type\":\"directory\",\"link\":\"/document/api/237\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 SQL Server\",\"weight\":166,\"id\":238,\"children\":[],\"rootId\":7241,\"type\":\"directory\",\"link\":\"/document/api/238\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 PostgreSQL\",\"weight\":164,\"id\":409,\"children\":[],\"rootId\":15624,\"type\":\"directory\",\"link\":\"/document/api/409\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 Redis®\",\"weight\":160,\"id\":239,\"children\":[],\"rootId\":7227,\"type\":\"directory\",\"link\":\"/document/api/239\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"内容分发网络 CDN\",\"weight\":160,\"id\":228,\"children\":[],\"rootId\":7218,\"type\":\"directory\",\"link\":\"/document/api/228\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 Memcached\",\"weight\":158,\"id\":241,\"children\":[],\"rootId\":7228,\"type\":\"directory\",\"link\":\"/document/api/241\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 MongoDB\",\"weight\":156,\"id\":240,\"children\":[],\"rootId\":7119,\"type\":\"directory\",\"link\":\"/document/api/240\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"TDSQL MySQL版\",\"weight\":152,\"id\":557,\"children\":[],\"rootId\":15632,\"type\":\"directory\",\"link\":\"/document/api/557\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据传输服务\",\"weight\":150,\"id\":571,\"children\":[],\"rootId\":18121,\"type\":\"directory\",\"link\":\"/document/api/571\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"全球应用加速\",\"weight\":150,\"id\":608,\"children\":[],\"rootId\":36253,\"type\":\"directory\",\"link\":\"/document/api/608\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云区块链服务平台 TBaaS\",\"weight\":100,\"id\":663,\"children\":[],\"rootId\":14012,\"type\":\"directory\",\"link\":\"/document/api/663\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云拨测\",\"weight\":100,\"id\":280,\"children\":[],\"rootId\":40876,\"type\":\"directory\",\"link\":\"/document/api/280\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"主机安全\",\"weight\":80,\"id\":296,\"children\":[],\"rootId\":19795,\"type\":\"directory\",\"link\":\"/document/api/296\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"访问管理\",\"weight\":80,\"id\":598,\"children\":[],\"rootId\":13874,\"type\":\"directory\",\"link\":\"/document/api/598\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"DDoS 防护\",\"weight\":75,\"id\":297,\"children\":[],\"rootId\":95281,\"type\":\"directory\",\"link\":\"/document/api/297\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"标签\",\"weight\":75,\"id\":651,\"children\":[],\"rootId\":13561,\"type\":\"directory\",\"link\":\"/document/api/651\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"密钥管理系统\",\"weight\":70,\"id\":573,\"children\":[],\"rootId\":8887,\"type\":\"directory\",\"link\":\"/document/api/573\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"Web 应用防火墙\",\"weight\":70,\"id\":627,\"children\":[],\"rootId\":53495,\"type\":\"directory\",\"link\":\"/document/api/627\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"域名注册\",\"weight\":60,\"id\":242,\"children\":[],\"rootId\":38803,\"type\":\"directory\",\"link\":\"/document/api/242\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"操作审计\",\"weight\":60,\"id\":629,\"children\":[],\"rootId\":12357,\"type\":\"directory\",\"link\":\"/document/api/629\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"SSL 证书\",\"weight\":57,\"id\":400,\"children\":[],\"rootId\":9075,\"type\":\"directory\",\"link\":\"/document/api/400\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"移动推送\",\"weight\":31,\"id\":548,\"children\":[],\"rootId\":39059,\"type\":\"directory\",\"link\":\"/document/api/548\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"数据万象\",\"weight\":29,\"id\":460,\"children\":[],\"rootId\":6817,\"type\":\"directory\",\"link\":\"/document/api/460\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"短信\",\"weight\":29,\"id\":382,\"children\":[],\"rootId\":3776,\"type\":\"directory\",\"link\":\"/document/api/382\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"NLP 服务\",\"weight\":28,\"id\":271,\"children\":[],\"rootId\":7231,\"type\":\"directory\",\"link\":\"/document/api/271\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云点播\",\"weight\":27,\"id\":266,\"children\":[],\"rootId\":7784,\"type\":\"directory\",\"link\":\"/document/api/266\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云加密机\",\"weight\":25,\"id\":639,\"children\":[],\"rootId\":41410,\"type\":\"directory\",\"link\":\"/document/api/639\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云市场\",\"weight\":25,\"id\":306,\"children\":[],\"rootId\":57381,\"type\":\"directory\",\"link\":\"/document/api/306\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云安全中心\",\"weight\":22,\"id\":664,\"children\":[],\"rootId\":51368,\"type\":\"directory\",\"link\":\"/document/api/664\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云开发 CloudBase\",\"weight\":21,\"id\":876,\"children\":[],\"rootId\":34781,\"type\":\"directory\",\"link\":\"/document/api/876\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人脸识别\",\"weight\":20,\"id\":867,\"children\":[],\"rootId\":17581,\"type\":\"directory\",\"link\":\"/document/api/867\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"流计算 Oceanus\",\"weight\":20,\"id\":849,\"children\":[{\"id\":52020,\"title\":\"更新历史\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52020\"},{\"id\":52018,\"title\":\"简介\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52018\"},{\"id\":52019,\"title\":\"API 概览\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52019\"},{\"id\":52011,\"title\":\"调用方式\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":52012,\"title\":\"请求结构\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52012\"},{\"id\":52013,\"title\":\"公共参数\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52013\"},{\"id\":52014,\"title\":\"签名方法 v3\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52014\"},{\"id\":52015,\"title\":\"签名方法\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52015\"},{\"id\":52016,\"title\":\"返回结果\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52016\"},{\"id\":78537,\"title\":\"参数类型\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/78537\"}],\"categoryId\":849,\"link\":\"/document/api/849/52011\"},{\"id\":95068,\"title\":\"日志相关接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":95069,\"title\":\"查询作业实例启动日志\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/95069\"}],\"categoryId\":849,\"link\":\"/document/api/849/95068\"},{\"id\":51998,\"title\":\"资源相关接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":52000,\"title\":\"创建资源接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52000\"},{\"id\":54670,\"title\":\"删除资源接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/54670\"},{\"id\":54669,\"title\":\"获取资源关联作业信息\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/54669\"},{\"id\":54668,\"title\":\"描述资源接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/54668\"},{\"id\":51999,\"title\":\"描述系统资源接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/51999\"}],\"categoryId\":849,\"link\":\"/document/api/849/51998\"},{\"id\":51996,\"title\":\"资源配置相关接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":51997,\"title\":\"创建资源配置接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/51997\"},{\"id\":54667,\"title\":\"删除资源版本\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/54667\"},{\"id\":54666,\"title\":\"描述资源配置接口\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/54666\"}],\"categoryId\":849,\"link\":\"/document/api/849/51996\"},{\"id\":102772,\"title\":\"元数据相关接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":102773,\"title\":\"查询元数据表\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/102773\"}],\"categoryId\":849,\"link\":\"/document/api/849/102772\"},{\"id\":94137,\"title\":\"权限相关接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":100451,\"title\":\"创建工作空间\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100451\"},{\"id\":100579,\"title\":\"删除工作空间\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100579\"},{\"id\":100450,\"title\":\"修改工作空间\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100450\"},{\"id\":94138,\"title\":\"授权工作空间列表\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/94138\"}],\"categoryId\":849,\"link\":\"/document/api/849/94137\"},{\"id\":76831,\"title\":\"集群接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":76832,\"title\":\"查询集群\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/76832\"}],\"categoryId\":849,\"link\":\"/document/api/849/76831\"},{\"id\":52005,\"title\":\"作业接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":74227,\"title\":\"检查快照是否可用\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/74227\"},{\"id\":77740,\"title\":\"复制作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/77740\"},{\"id\":76834,\"title\":\"删除作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/76834\"},{\"id\":102554,\"title\":\"获取指定作业的事件\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/102554\"},{\"id\":74226,\"title\":\"查找Savepoint列表\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/74226\"},{\"id\":75553,\"title\":\"更新作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/75553\"},{\"id\":52007,\"title\":\"运行作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52007\"},{\"id\":52006,\"title\":\"停止作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52006\"},{\"id\":75095,\"title\":\"触发Savepoint\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/75095\"},{\"id\":52009,\"title\":\"新建作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52009\"},{\"id\":52008,\"title\":\"查询作业\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52008\"},{\"id\":100320,\"title\":\"执行Statement\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100320\"},{\"id\":100321,\"title\":\"查询Statement执行结果\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100321\"},{\"id\":111554,\"title\":\"获取作业运行时的信息\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/111554\"}],\"categoryId\":849,\"link\":\"/document/api/849/52005\"},{\"id\":52003,\"title\":\"作业配置接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":52004,\"title\":\"创建作业配置\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52004\"},{\"id\":100454,\"title\":\"删除作业配置\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100454\"},{\"id\":52875,\"title\":\"查询作业配置\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52875\"}],\"categoryId\":849,\"link\":\"/document/api/849/52003\"},{\"id\":52001,\"title\":\"其他接口\",\"type\":\"directory\",\"docType\":\"default\",\"pdfUrl\":\"\",\"children\":[{\"id\":77739,\"title\":\"创建文件夹\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/77739\"},{\"id\":100453,\"title\":\"删除文件夹\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100453\"},{\"id\":52002,\"title\":\"删除作业表配置\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52002\"},{\"id\":76833,\"title\":\"自定义树状结构\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/76833\"},{\"id\":100452,\"title\":\"拖拽文件夹\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/100452\"},{\"id\":79568,\"title\":\"查询树状结构资源列表\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/79568\"},{\"id\":102187,\"title\":\"查询文件夹\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/102187\"}],\"categoryId\":849,\"link\":\"/document/api/849/52001\"},{\"id\":52010,\"title\":\"数据结构\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52010\"},{\"id\":52017,\"title\":\"错误码\",\"type\":\"page\",\"docType\":\"default\",\"pdfUrl\":\"\",\"categoryId\":849,\"link\":\"/document/api/849/52017\"}],\"rootId\":51992,\"type\":\"directory\",\"link\":\"/document/api/849\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"文字识别\",\"weight\":20,\"id\":866,\"children\":[],\"rootId\":17603,\"type\":\"directory\",\"link\":\"/document/api/866\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"集团账号管理\",\"weight\":20,\"id\":850,\"children\":[],\"rootId\":38715,\"type\":\"directory\",\"link\":\"/document/api/850\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云数据仓库 TCHouse-P\",\"weight\":20,\"id\":878,\"children\":[],\"rootId\":98865,\"type\":\"directory\",\"link\":\"/document/api/878\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"口语评测(基础版)\",\"weight\":20,\"id\":884,\"children\":[],\"rootId\":19308,\"type\":\"directory\",\"link\":\"/document/api/884\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"Elasticsearch Service\",\"weight\":20,\"id\":845,\"children\":[],\"rootId\":17154,\"type\":\"directory\",\"link\":\"/document/api/845\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"图像识别\",\"weight\":20,\"id\":865,\"children\":[],\"rootId\":17591,\"type\":\"directory\",\"link\":\"/document/api/865\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"媒体处理\",\"weight\":15,\"id\":862,\"children\":[],\"rootId\":37032,\"type\":\"directory\",\"link\":\"/document/api/862\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云直播\",\"weight\":13,\"id\":267,\"children\":[],\"rootId\":7226,\"type\":\"directory\",\"link\":\"/document/api/267\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云联络中心\",\"weight\":12,\"id\":679,\"children\":[],\"rootId\":14496,\"type\":\"directory\",\"link\":\"/document/api/679\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"机器翻译\",\"weight\":9,\"id\":551,\"children\":[],\"rootId\":7376,\"type\":\"directory\",\"link\":\"/document/api/551\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"物联网通信\",\"weight\":9,\"id\":634,\"children\":[],\"rootId\":12042,\"type\":\"directory\",\"link\":\"/document/api/634\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人脸融合\",\"weight\":7,\"id\":670,\"children\":[],\"rootId\":14353,\"type\":\"directory\",\"link\":\"/document/api/670\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"弹性 MapReduce\",\"weight\":6,\"id\":589,\"children\":[],\"rootId\":10215,\"type\":\"directory\",\"link\":\"/document/api/589\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"游戏数据库 TcaplusDB\",\"weight\":6,\"id\":596,\"children\":[],\"rootId\":31659,\"type\":\"directory\",\"link\":\"/document/api/596\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"游戏多媒体引擎\",\"weight\":5,\"id\":607,\"children\":[],\"rootId\":35360,\"type\":\"directory\",\"link\":\"/document/api/607\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云 BI\",\"weight\":5,\"id\":590,\"children\":[],\"rootId\":73700,\"type\":\"directory\",\"link\":\"/document/api/590\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"实时音视频\",\"weight\":3,\"id\":647,\"children\":[],\"rootId\":36695,\"type\":\"directory\",\"link\":\"/document/api/647\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"渠道合作伙伴\",\"weight\":2,\"id\":563,\"children\":[],\"rootId\":8085,\"type\":\"directory\",\"link\":\"/document/api/563\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"TI-ONE 训练平台\",\"weight\":2,\"id\":851,\"children\":[],\"rootId\":39965,\"type\":\"directory\",\"link\":\"/document/api/851\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据安全审计\",\"weight\":1,\"id\":856,\"children\":[],\"rootId\":33128,\"type\":\"directory\",\"link\":\"/document/api/856\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云压测\",\"weight\":0,\"id\":1484,\"children\":[],\"rootId\":77867,\"type\":\"directory\",\"link\":\"/document/api/1484\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"商场客留大数据\",\"weight\":0,\"id\":1707,\"children\":[],\"rootId\":95046,\"type\":\"directory\",\"link\":\"/document/api/1707\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云健康看板\",\"weight\":0,\"id\":1688,\"children\":[],\"rootId\":94831,\"type\":\"directory\",\"link\":\"/document/api/1688\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"全栈式风控引擎\",\"weight\":0,\"id\":1343,\"children\":[],\"rootId\":52533,\"type\":\"directory\",\"link\":\"/document/api/1343\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"大模型图像创作引擎\",\"weight\":0,\"id\":1668,\"children\":[],\"rootId\":88046,\"type\":\"directory\",\"link\":\"/document/api/1668\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"实时互动-教育版\",\"weight\":0,\"id\":1639,\"children\":[],\"rootId\":79904,\"type\":\"directory\",\"link\":\"/document/api/1639\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"设备安全\",\"weight\":0,\"id\":1628,\"children\":[],\"rootId\":79792,\"type\":\"directory\",\"link\":\"/document/api/1628\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云数据仓库 TCHouse-C\",\"weight\":0,\"id\":1299,\"children\":[],\"rootId\":83400,\"type\":\"directory\",\"link\":\"/document/api/1299\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库 KeeWiDB\",\"weight\":0,\"id\":1520,\"children\":[],\"rootId\":86181,\"type\":\"directory\",\"link\":\"/document/api/1520\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"5G入云服务\",\"weight\":0,\"id\":1687,\"children\":[],\"rootId\":90994,\"type\":\"directory\",\"link\":\"/document/api/1687\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据加速器 GooseFS\",\"weight\":0,\"id\":1424,\"children\":[],\"rootId\":85974,\"type\":\"directory\",\"link\":\"/document/api/1424\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"声音复刻\",\"weight\":0,\"id\":1283,\"children\":[],\"rootId\":89644,\"type\":\"directory\",\"link\":\"/document/api/1283\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"文旅客情大数据\",\"weight\":0,\"id\":1684,\"children\":[],\"rootId\":89952,\"type\":\"directory\",\"link\":\"/document/api/1684\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"实时互动-工业能源版\",\"weight\":0,\"id\":1584,\"children\":[],\"rootId\":89451,\"type\":\"directory\",\"link\":\"/document/api/1584\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯健康组学平台\",\"weight\":0,\"id\":1643,\"children\":[],\"rootId\":89045,\"type\":\"directory\",\"link\":\"/document/api/1643\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯安心用户运营平台\",\"weight\":0,\"id\":1310,\"children\":[],\"rootId\":89030,\"type\":\"directory\",\"link\":\"/document/api/1310\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"Cloud Studio(云端 IDE)\",\"weight\":0,\"id\":1039,\"children\":[],\"rootId\":80522,\"type\":\"directory\",\"link\":\"/document/api/1039\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"分布式身份\",\"weight\":0,\"id\":1439,\"children\":[],\"rootId\":55890,\"type\":\"directory\",\"link\":\"/document/api/1439\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"智能视图计算平台\",\"weight\":0,\"id\":1344,\"children\":[],\"rootId\":50438,\"type\":\"directory\",\"link\":\"/document/api/1344\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"控制中心\",\"weight\":0,\"id\":1708,\"children\":[],\"rootId\":110432,\"type\":\"directory\",\"link\":\"/document/api/1708\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"腾讯微卡\",\"weight\":0,\"id\":1523,\"children\":[],\"rootId\":87712,\"type\":\"directory\",\"link\":\"/document/api/1523\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"文档服务\",\"weight\":0,\"id\":1250,\"children\":[],\"rootId\":109265,\"type\":\"directory\",\"link\":\"/document/api/1250\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"消息队列 RabbitMQ 版\",\"weight\":0,\"id\":1495,\"children\":[],\"type\":\"directory\",\"link\":\"/document/api/1495\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"统一 Catalog 服务\",\"weight\":0,\"id\":1784,\"children\":[],\"rootId\":115891,\"type\":\"directory\",\"link\":\"/document/api/1784\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"知识引擎原子能力\",\"weight\":0,\"id\":1772,\"children\":[],\"rootId\":111131,\"type\":\"directory\",\"link\":\"/document/api/1772\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"商业流程服务\",\"weight\":0,\"id\":1083,\"children\":[],\"rootId\":80900,\"type\":\"directory\",\"link\":\"/document/api/1083\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"消息队列 MQTT 版\",\"weight\":0,\"id\":1778,\"children\":[],\"rootId\":110972,\"type\":\"directory\",\"link\":\"/document/api/1778\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"AI 临床助手\",\"weight\":0,\"id\":1388,\"children\":[],\"rootId\":114303,\"type\":\"directory\",\"link\":\"/document/api/1388\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"音视频终端 SDK(腾讯云视立方)\",\"weight\":0,\"id\":1449,\"children\":[],\"rootId\":112728,\"type\":\"directory\",\"link\":\"/document/api/1449\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"身份识别平台\",\"weight\":0,\"id\":1787,\"children\":[],\"rootId\":112825,\"type\":\"directory\",\"link\":\"/document/api/1787\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"智能导诊\",\"weight\":0,\"id\":1273,\"children\":[],\"rootId\":112543,\"type\":\"directory\",\"link\":\"/document/api/1273\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"网关负载均衡\",\"weight\":0,\"id\":1782,\"children\":[],\"rootId\":111621,\"type\":\"directory\",\"link\":\"/document/api/1782\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云 CA\",\"weight\":0,\"id\":1691,\"children\":[],\"rootId\":111292,\"type\":\"directory\",\"link\":\"/document/api/1691\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云应用\",\"weight\":0,\"id\":1689,\"children\":[],\"rootId\":108678,\"type\":\"directory\",\"link\":\"/document/api/1689\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据安全治理中心\",\"weight\":0,\"id\":1087,\"children\":[],\"rootId\":96830,\"type\":\"directory\",\"link\":\"/document/api/1087\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"专属可用区\",\"weight\":0,\"id\":1629,\"children\":[],\"rootId\":108679,\"type\":\"directory\",\"link\":\"/document/api/1629\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"大模型视频创作引擎\",\"weight\":0,\"id\":1616,\"children\":[],\"rootId\":107781,\"type\":\"directory\",\"link\":\"/document/api/1616\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯同传\",\"weight\":0,\"id\":1399,\"children\":[],\"rootId\":107632,\"type\":\"directory\",\"link\":\"/document/api/1399\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"向量数据库\",\"weight\":0,\"id\":1709,\"children\":[],\"rootId\":106754,\"type\":\"directory\",\"link\":\"/document/api/1709\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"大模型知识引擎\",\"weight\":0,\"id\":1759,\"children\":[],\"rootId\":104214,\"type\":\"directory\",\"link\":\"/document/api/1759\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"音速达直播音乐版权引擎\",\"weight\":0,\"id\":1592,\"children\":[],\"rootId\":76184,\"type\":\"directory\",\"link\":\"/document/api/1592\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"iOA 零信任安全管理系统\",\"weight\":0,\"id\":1092,\"children\":[],\"rootId\":102464,\"type\":\"directory\",\"link\":\"/document/api/1092\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯云数据仓库 TCHouse-D\",\"weight\":0,\"id\":1387,\"children\":[],\"rootId\":102294,\"type\":\"directory\",\"link\":\"/document/api/1387\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯混元大模型\",\"weight\":0,\"id\":1729,\"children\":[],\"rootId\":101832,\"type\":\"directory\",\"link\":\"/document/api/1729\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"配置审计\",\"weight\":0,\"id\":1579,\"children\":[],\"rootId\":101778,\"type\":\"directory\",\"link\":\"/document/api/1579\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"语音识别\",\"weight\":0,\"id\":1093,\"children\":[],\"rootId\":35635,\"type\":\"directory\",\"link\":\"/document/api/1093\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"高性能应用服务 HAI\",\"weight\":0,\"id\":1721,\"children\":[],\"rootId\":101037,\"type\":\"directory\",\"link\":\"/document/api/1721\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"微瓴同业开放平台\",\"weight\":0,\"id\":1693,\"children\":[],\"rootId\":97953,\"type\":\"directory\",\"link\":\"/document/api/1693\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"消息队列 RocketMQ 版\",\"weight\":0,\"id\":1493,\"children\":[],\"rootId\":71647,\"type\":\"directory\",\"link\":\"/document/api/1493\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"地域管理系统\",\"weight\":0,\"id\":1596,\"children\":[],\"rootId\":77923,\"type\":\"directory\",\"link\":\"/document/api/1596\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"前端性能监控\",\"weight\":0,\"id\":1464,\"children\":[],\"rootId\":59368,\"type\":\"directory\",\"link\":\"/document/api/1464\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据开发治理平台 WeData\",\"weight\":0,\"id\":1267,\"children\":[],\"rootId\":76321,\"type\":\"directory\",\"link\":\"/document/api/1267\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"互动白板\",\"weight\":0,\"id\":1137,\"children\":[],\"rootId\":38024,\"type\":\"directory\",\"link\":\"/document/api/1137\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"自动化助手\",\"weight\":0,\"id\":1340,\"children\":[],\"rootId\":52664,\"type\":\"directory\",\"link\":\"/document/api/1340\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"视频内容安全\",\"weight\":0,\"id\":1265,\"children\":[],\"rootId\":50669,\"type\":\"directory\",\"link\":\"/document/api/1265\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"邮件推送\",\"weight\":0,\"id\":1288,\"children\":[],\"rootId\":51028,\"type\":\"directory\",\"link\":\"/document/api/1288\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"安全凭证服务\",\"weight\":0,\"id\":1312,\"children\":[],\"rootId\":48168,\"type\":\"directory\",\"link\":\"/document/api/1312\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"音频内容安全\",\"weight\":0,\"id\":1219,\"children\":[],\"rootId\":44349,\"type\":\"directory\",\"link\":\"/document/api/1219\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人体分析\",\"weight\":0,\"id\":1208,\"children\":[],\"rootId\":42949,\"type\":\"directory\",\"link\":\"/document/api/1208\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"轻量应用服务器\",\"weight\":0,\"id\":1207,\"children\":[],\"rootId\":42877,\"type\":\"directory\",\"link\":\"/document/api/1207\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人像变换\",\"weight\":0,\"id\":1202,\"children\":[],\"rootId\":41899,\"type\":\"directory\",\"link\":\"/document/api/1202\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人脸试妆\",\"weight\":0,\"id\":1172,\"children\":[],\"rootId\":40685,\"type\":\"directory\",\"link\":\"/document/api/1172\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云游戏\",\"weight\":0,\"id\":1162,\"children\":[],\"rootId\":40727,\"type\":\"directory\",\"link\":\"/document/api/1162\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"智能创作\",\"weight\":0,\"id\":1156,\"children\":[],\"rootId\":38802,\"type\":\"directory\",\"link\":\"/document/api/1156\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"容器镜像服务\",\"weight\":0,\"id\":1141,\"children\":[],\"rootId\":39290,\"type\":\"directory\",\"link\":\"/document/api/1141\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"凭据管理系统\",\"weight\":0,\"id\":1140,\"children\":[],\"rootId\":40443,\"type\":\"directory\",\"link\":\"/document/api/1140\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云防火墙\",\"weight\":0,\"id\":1132,\"children\":[],\"rootId\":37728,\"type\":\"directory\",\"link\":\"/document/api/1132\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据湖计算 DLC\",\"weight\":0,\"id\":1342,\"children\":[],\"rootId\":53658,\"type\":\"directory\",\"link\":\"/document/api/1342\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数据库智能管家 DBbrain\",\"weight\":0,\"id\":1130,\"children\":[],\"rootId\":39384,\"type\":\"directory\",\"link\":\"/document/api/1130\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"语音消息\",\"weight\":0,\"id\":1128,\"children\":[],\"rootId\":37529,\"type\":\"directory\",\"link\":\"/document/api/1128\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"文本内容安全\",\"weight\":0,\"id\":1124,\"children\":[],\"rootId\":41414,\"type\":\"directory\",\"link\":\"/document/api/1124\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"验证码\",\"weight\":0,\"id\":1110,\"children\":[],\"rootId\":36341,\"type\":\"directory\",\"link\":\"/document/api/1110\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"边缘计算机器\",\"weight\":0,\"id\":1108,\"children\":[],\"rootId\":36289,\"type\":\"directory\",\"link\":\"/document/api/1108\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云 HDFS\",\"weight\":0,\"id\":1105,\"children\":[],\"rootId\":36454,\"type\":\"directory\",\"link\":\"/document/api/1105\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"证书监控 SSLPod\",\"weight\":0,\"id\":1084,\"children\":[],\"rootId\":49333,\"type\":\"directory\",\"link\":\"/document/api/1084\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"物联网开发平台\",\"weight\":0,\"id\":1081,\"children\":[],\"rootId\":34746,\"type\":\"directory\",\"link\":\"/document/api/1081\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"英文作文批改\",\"weight\":0,\"id\":1076,\"children\":[],\"rootId\":34162,\"type\":\"directory\",\"link\":\"/document/api/1076\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"语音合成\",\"weight\":0,\"id\":1073,\"children\":[],\"rootId\":34079,\"type\":\"directory\",\"link\":\"/document/api/1073\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"人脸核身\",\"weight\":0,\"id\":1007,\"children\":[],\"rootId\":31318,\"type\":\"directory\",\"link\":\"/document/api/1007\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数学作业批改\",\"weight\":0,\"id\":1004,\"children\":[],\"rootId\":30569,\"type\":\"directory\",\"link\":\"/document/api/1004\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"TDSQL-C MySQL 版\",\"weight\":0,\"id\":1003,\"children\":[],\"rootId\":48054,\"type\":\"directory\",\"link\":\"/document/api/1003\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"计费相关\",\"weight\":0,\"id\":555,\"children\":[],\"rootId\":19168,\"type\":\"directory\",\"link\":\"/document/api/555\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"物联网智能视频服务(行业版)\",\"weight\":0,\"id\":1361,\"children\":[],\"rootId\":53663,\"type\":\"directory\",\"link\":\"/document/api/1361\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"微服务引擎 TSE\",\"weight\":0,\"id\":1364,\"children\":[],\"rootId\":54367,\"type\":\"directory\",\"link\":\"/document/api/1364\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云托管 CloudBase Run\",\"weight\":0,\"id\":1243,\"children\":[],\"rootId\":75699,\"type\":\"directory\",\"link\":\"/document/api/1243\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"TDSQL-C PostgreSQL 版\",\"weight\":0,\"id\":1556,\"children\":[],\"rootId\":70437,\"type\":\"directory\",\"link\":\"/document/api/1556\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"账号风控平台\",\"weight\":0,\"id\":1441,\"children\":[],\"rootId\":56911,\"type\":\"directory\",\"link\":\"/document/api/1441\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"小程序安全\",\"weight\":0,\"id\":1223,\"children\":[],\"rootId\":75134,\"type\":\"directory\",\"link\":\"/document/api/1223\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯安心平台\",\"weight\":0,\"id\":1458,\"children\":[],\"rootId\":75000,\"type\":\"directory\",\"link\":\"/document/api/1458\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"碳引擎\",\"weight\":0,\"id\":1498,\"children\":[],\"rootId\":74947,\"type\":\"directory\",\"link\":\"/document/api/1498\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云数据库独享集群\",\"weight\":0,\"id\":1322,\"children\":[],\"rootId\":74746,\"type\":\"directory\",\"link\":\"/document/api/1322\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"应用性能监控\",\"weight\":0,\"id\":1463,\"children\":[],\"rootId\":64832,\"type\":\"directory\",\"link\":\"/document/api/1463\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"本地专用集群\",\"weight\":0,\"id\":1346,\"children\":[],\"rootId\":73688,\"type\":\"directory\",\"link\":\"/document/api/1346\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"运维安全中心(堡垒机)\",\"weight\":0,\"id\":1025,\"children\":[],\"rootId\":46158,\"type\":\"directory\",\"link\":\"/document/api/1025\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"边缘安全加速平台 EO\",\"weight\":0,\"id\":1552,\"children\":[],\"rootId\":67788,\"type\":\"directory\",\"link\":\"/document/api/1552\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"应用云渲染\",\"weight\":0,\"id\":1547,\"children\":[],\"rootId\":72721,\"type\":\"directory\",\"link\":\"/document/api/1547\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"软件成分分析\",\"weight\":0,\"id\":1483,\"children\":[],\"rootId\":72067,\"type\":\"directory\",\"link\":\"/document/api/1483\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"智能媒资托管\",\"weight\":0,\"id\":1339,\"children\":[],\"rootId\":49942,\"type\":\"directory\",\"link\":\"/document/api/1339\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"混沌演练平台\",\"weight\":0,\"id\":1500,\"children\":[],\"rootId\":63385,\"type\":\"directory\",\"link\":\"/document/api/1500\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"腾讯电子签\",\"weight\":0,\"id\":1323,\"children\":[],\"rootId\":61507,\"type\":\"directory\",\"link\":\"/document/api/1323\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"区块链可信取证\",\"weight\":0,\"id\":1259,\"children\":[],\"rootId\":54907,\"type\":\"directory\",\"link\":\"/document/api/1259\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"高性能计算平台\",\"weight\":0,\"id\":1527,\"children\":[],\"rootId\":64643,\"type\":\"directory\",\"link\":\"/document/api/1527\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"事件总线\",\"weight\":0,\"id\":1359,\"children\":[],\"rootId\":67673,\"type\":\"directory\",\"link\":\"/document/api/1359\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"容器安全服务\",\"weight\":0,\"id\":1285,\"children\":[],\"rootId\":65412,\"type\":\"directory\",\"link\":\"/document/api/1285\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"视频理解\",\"weight\":0,\"id\":1509,\"children\":[],\"rootId\":63730,\"type\":\"directory\",\"link\":\"/document/api/1509\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"服务网格\",\"weight\":0,\"id\":1261,\"children\":[],\"rootId\":63193,\"type\":\"directory\",\"link\":\"/document/api/1261\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"云顾问\",\"weight\":0,\"id\":1264,\"children\":[],\"rootId\":63077,\"type\":\"directory\",\"link\":\"/document/api/1264\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"数字身份管控平台(员工版)\",\"weight\":0,\"id\":1442,\"children\":[],\"rootId\":56912,\"type\":\"directory\",\"link\":\"/document/api/1442\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"图片内容安全\",\"weight\":0,\"id\":1125,\"children\":[],\"rootId\":41413,\"type\":\"directory\",\"link\":\"/document/api/1125\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"医疗报告结构化\",\"weight\":0,\"id\":1314,\"children\":[],\"rootId\":54316,\"type\":\"directory\",\"link\":\"/document/api/1314\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"DNSPod\",\"weight\":0,\"id\":1427,\"children\":[],\"rootId\":54337,\"type\":\"directory\",\"link\":\"/document/api/1427\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"私有域解析 Private DNS\",\"weight\":0,\"id\":1338,\"children\":[],\"rootId\":54995,\"type\":\"directory\",\"link\":\"/document/api/1338\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"多网聚合加速\",\"weight\":0,\"id\":1385,\"children\":[],\"rootId\":55797,\"type\":\"directory\",\"link\":\"/document/api/1385\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"弹性微服务\",\"weight\":0,\"id\":1371,\"children\":[],\"rootId\":55334,\"type\":\"directory\",\"link\":\"/document/api/1371\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"3.0\",\"title\":\"物联网智能视频服务(消费版)\",\"weight\":0,\"id\":1131,\"children\":[],\"rootId\":42172,\"type\":\"directory\",\"link\":\"/document/api/1131\"},{\"docType\":\"api\",\"lang\":\"zh\",\"tag\":\"\",\"title\":\"视频审核\",\"weight\":0,\"id\":1535,\"children\":[],\"rootId\":108723,\"type\":\"directory\",\"link\":\"/document/api/1535\"}]},\"searchDisable\":false},\"navbar\":{\"title\":\"API 中心\",\"expandable\":false},\"plugins\":{},\"feedbackTags\":{\"1\":\"内容找不到\",\"2\":\"内容没更新\",\"3\":\"描述不清楚\",\"4\":\"步骤不完整\",\"5\":\"链接有错误\",\"6\":\"代码/图片缺失\",\"7\":\"找不到\",\"8\":\"不好用\",\"9\":\"看不懂\",\"10\":\"有错误\",\"11\":\"没更新\",\"12\":\"其他\"}},\"staticContext\":{\"isMobile\":false,\"isMiniProgram\":false,\"isWechat\":false,\"isPreview\":false,\"originalUrl\":\"/document/api/849/52015\",\"CDN_DOMAIN\":\"cloudcache.tencent-cloud.com\",\"QCLOUD_DOMAIN\":\"cloud.tencent.com\",\"isLegalReferer\":true,\"ssrInfo\":{},\"language\":\"zh\",\"requestId\":\"W39XKSX4R\"}},\"api-article\":{\"data\":{\"article\":{\"type\":\"page\",\"lang\":\"zh\",\"checkStatus\":1,\"categoryId\":849,\"content\":{\"disable\":false,\"disableTip\":\"\",\"title\":\"签名方法\",\"keywords\":\"\",\"description\":\"签名方法v1简单易用,但是功能和安全性都不如签名方法v3,推荐使用签名方法v3。首次接触,建议使用APIExplorer中的“签名串生成”功能,选择签名版本为“API3.0签名v1”,可以生成签名过程\",\"docType\":\"default\",\"isGlossary\":false,\"body\":\"\u003cp\u003e签名方法 v1 简单易用,但是功能和安全性都不如签名方法 v3,推荐使用签名方法 v3。\u003c/p\u003e\\n\u003cp\u003e首次接触,建议使用 \u003ca href=\\\"https://console.cloud.tencent.com/api/explorer\\\"\u003eAPI Explorer\u003c/a\u003e 中的“签名串生成”功能,选择签名版本为“API 3.0 签名 v1”,可以生成签名过程进行验证,并提供了部分编程语言的签名示例,也可直接生成 SDK 代码。推荐使用腾讯云 API 配套的 8 种常见的编程语言 SDK,已经封装了签名和请求过程,均已开源,支持 \u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-python\\\"\u003ePython\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-java\\\"\u003eJava\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-php\\\"\u003ePHP\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-go\\\"\u003eGo\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-nodejs\\\"\u003eNodeJS\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-dotnet\\\"\u003e.NET\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-cpp\\\"\u003eC++\u003c/a\u003e、\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-ruby\\\"\u003eRuby\u003c/a\u003e。\u003c/p\u003e\\n\u003cdiv class=\\\"rno-api-explorer\\\"\u003e\\n \u003cdiv class=\\\"rno-api-explorer-inner\\\"\u003e\\n \u003cdiv class=\\\"rno-api-explorer-hd\\\"\u003e\\n \u003cdiv class=\\\"rno-api-explorer-title\\\"\u003e\\n 推荐使用 API Explorer\\n \u003c/div\u003e\\n \u003ca href=\\\"https://console.cloud.tencent.com/api/explorer?SignVersion=api3v1\\\" class=\\\"rno-api-explorer-btn\\\" hotrep=\\\"doc.api.explorerbtn\\\"\u003e\u003ci class=\\\"rno-icon-explorer\\\"\u003e\u003c/i\u003e点击调试\u003c/a\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"rno-api-explorer-body\\\"\u003e\\n \u003cdiv class=\\\"rno-api-explorer-cont\\\"\u003e\\n 您可以通过 API Explorer 的【签名串生成】模块查看每个接口签名的生成过程。\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\\n\\n\u003cp\u003e腾讯云 API 会对每个访问请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证请求者身份。\u003cbr\u003e签名信息由安全凭证生成,安全凭证包括 SecretId 和 SecretKey;若用户还没有安全凭证,请前往 \u003ca href=\\\"https://console.cloud.tencent.com/capi\\\"\u003e云API密钥页面\u003c/a\u003e 申请,否则无法调用云 API 接口。\u003c/p\u003e\\n\u003ch2 id=\\\"1.-.E7.94.B3.E8.AF.B7.E5.AE.89.E5.85.A8.E5.87.AD.E8.AF.81\\\"\u003e1. 申请安全凭证\u003c/h2\u003e\u003cp\u003e在第一次使用云 API 之前,请前往 \u003ca href=\\\"https://console.cloud.tencent.com/capi\\\"\u003e云 API 密钥页面\u003c/a\u003e 申请安全凭证。\u003cbr\u003e安全凭证包括 SecretId 和 SecretKey:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003eSecretId 用于标识 API 调用者身份\u003c/li\u003e\\n\u003cli\u003eSecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。\u003c/li\u003e\\n\u003cli\u003e\u003cstrong\u003e用户必须严格保管安全凭证,避免泄露。\u003c/strong\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003e申请安全凭证的具体步骤如下:\u003c/p\u003e\\n\u003col\u003e\\n\u003cli\u003e登录 \u003ca href=\\\"https://console.cloud.tencent.com/\\\"\u003e腾讯云管理中心控制台\u003c/a\u003e 。\u003c/li\u003e\\n\u003cli\u003e前往 \u003ca href=\\\"https://console.cloud.tencent.com/capi\\\"\u003e云 API 密钥\u003c/a\u003e 的控制台页面\u003c/li\u003e\\n\u003cli\u003e在 \u003ca href=\\\"https://console.cloud.tencent.com/capi\\\"\u003e云 API 密钥\u003c/a\u003e 页面,单击【新建密钥】即可以创建一对 SecretId/SecretKey。\u003c/li\u003e\\n\u003c/ol\u003e\\n\u003cp\u003e注意:每个账号最多可以拥有两对 SecretId/SecretKey。\u003c/p\u003e\\n\u003ch2 id=\\\"2.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2\\\"\u003e2. 生成签名串\u003c/h2\u003e\u003cp\u003e有了安全凭证 SecretId 和 SecretKey 后,就可以生成签名串了。以下是使用签名方法 v1 生成签名串的详细过程:\u003c/p\u003e\\n\u003cp\u003e假设用户的 SecretId 和 SecretKey 分别是:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003eSecretId: \u003ccode\u003eAKID********************************\u003c/code\u003e\u003c/li\u003e\\n\u003cli\u003eSecretKey: \u003ccode\u003e********************************\u003c/code\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003e\u003cstrong\u003e注意:这里只是示例,请根据用户实际申请的 SecretId 和 SecretKey 进行后续操作!\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003e以云服务器查看实例列表(DescribeInstances)请求为例,当用户调用这一接口时,其请求参数可能如下:\u003c/p\u003e\\n\u003ctable\u003e\\n\u003cthead\u003e\\n\u003ctr\u003e\\n\u003cth\u003e参数名称\u003c/th\u003e\\n\u003cth\u003e中文\u003c/th\u003e\\n\u003cth\u003e参数值\u003c/th\u003e\\n\u003c/tr\u003e\\n\u003c/thead\u003e\\n\u003ctbody\u003e\u003ctr\u003e\\n\u003ctd\u003eAction\u003c/td\u003e\\n\u003ctd\u003e方法名\u003c/td\u003e\\n\u003ctd\u003eDescribeInstances\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eSecretId\u003c/td\u003e\\n\u003ctd\u003e密钥 ID\u003c/td\u003e\\n\u003ctd\u003e\u003ccode\u003eAKID********************************\u003c/code\u003e\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eTimestamp\u003c/td\u003e\\n\u003ctd\u003e当前时间戳\u003c/td\u003e\\n\u003ctd\u003e1465185768\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eNonce\u003c/td\u003e\\n\u003ctd\u003e随机正整数\u003c/td\u003e\\n\u003ctd\u003e11886\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eRegion\u003c/td\u003e\\n\u003ctd\u003e实例所在区域\u003c/td\u003e\\n\u003ctd\u003eap-guangzhou\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eInstanceIds.0\u003c/td\u003e\\n\u003ctd\u003e待查询的实例 ID\u003c/td\u003e\\n\u003ctd\u003eins-09dx96dg\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eOffset\u003c/td\u003e\\n\u003ctd\u003e偏移量\u003c/td\u003e\\n\u003ctd\u003e0\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eLimit\u003c/td\u003e\\n\u003ctd\u003e最大允许输出\u003c/td\u003e\\n\u003ctd\u003e20\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eVersion\u003c/td\u003e\\n\u003ctd\u003e接口版本号\u003c/td\u003e\\n\u003ctd\u003e2017-03-12\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003c/tbody\u003e\u003c/table\u003e\\n\u003cp\u003e这里只展示了部分公共参数和接口输入参数,用户可以根据实际需要添加其他参数,例如 Language 和 Token 公共参数。\u003c/p\u003e\\n\u003ch3 id=\\\"2.1.-.E5.AF.B9.E5.8F.82.E6.95.B0.E6.8E.92.E5.BA.8F\\\"\u003e2.1. 对参数排序\u003c/h3\u003e\u003cp\u003e首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。用户可以借助编程语言中的相关排序函数来实现这一功能,如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode\u003e{\\n \u0026#39;Action\u0026#39; : \u0026#39;DescribeInstances\u0026#39;,\\n \u0026#39;InstanceIds.0\u0026#39; : \u0026#39;ins-09dx96dg\u0026#39;,\\n \u0026#39;Limit\u0026#39; : 20,\\n \u0026#39;Nonce\u0026#39; : 11886,\\n \u0026#39;Offset\u0026#39; : 0,\\n \u0026#39;Region\u0026#39; : \u0026#39;ap-guangzhou\u0026#39;,\\n \u0026#39;SecretId\u0026#39; : \u0026#39;AKID********************************\u0026#39;,\\n \u0026#39;Timestamp\u0026#39; : 1465185768,\\n \u0026#39;Version\u0026#39;: \u0026#39;2017-03-12\u0026#39;,\\n}\u003c/code\u003e\u003c/pre\u003e使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。\u003c/p\u003e\\n\u003ch3 id=\\\"2.2.-.E6.8B.BC.E6.8E.A5.E8.AF.B7.E6.B1.82.E5.AD.97.E7.AC.A6.E4.B8.B2\\\"\u003e2.2. 拼接请求字符串\u003c/h3\u003e\u003cp\u003e此步骤生成请求字符串。\u003cbr\u003e将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 \u0026quot;Action\u0026quot; ,参数值为 \u0026quot;DescribeInstances\u0026quot; ,因此格式化后就为 Action=DescribeInstances 。\u003cbr\u003e\u003cstrong\u003e注意:“参数值”为原始值而非 url 编码后的值。\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003e然后将格式化后的各个参数用\u0026quot;\u0026amp;\u0026quot;拼接在一起,最终生成的请求字符串为:\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode\u003eAction=DescribeInstances\u0026amp;InstanceIds.0=ins-09dx96dg\u0026amp;Limit=20\u0026amp;Nonce=11886\u0026amp;Offset=0\u0026amp;Region=ap-guangzhou\u0026amp;SecretId=AKID********************************\u0026amp;Timestamp=1465185768\u0026amp;Version=2017-03-12\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\\n\u003ch3 id=\\\"2.3.-.E6.8B.BC.E6.8E.A5.E7.AD.BE.E5.90.8D.E5.8E.9F.E6.96.87.E5.AD.97.E7.AC.A6.E4.B8.B2\\\"\u003e2.3. 拼接签名原文字符串\u003c/h3\u003e\u003cp\u003e此步骤生成签名原文字符串。\u003cbr\u003e签名原文字符串由以下几个参数构成:\u003c/p\u003e\\n\u003col\u003e\\n\u003cli\u003e请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。\u003c/li\u003e\\n\u003cli\u003e请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。\u003c/li\u003e\\n\u003cli\u003e请求路径: 当前版本云API的请求路径固定为 / 。\u003c/li\u003e\\n\u003cli\u003e请求字符串: 即上一步生成的请求字符串。\u003c/li\u003e\\n\u003c/ol\u003e\\n\u003cp\u003e签名原文串的拼接规则为:\u003ccode\u003e请求方法 + 请求主机 +请求路径 + ? + 请求字符串\u003c/code\u003e。\u003c/p\u003e\\n\u003cp\u003e示例的拼接结果为:\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode\u003eGETcvm.tencentcloudapi.com/?Action=DescribeInstances\u0026amp;InstanceIds.0=ins-09dx96dg\u0026amp;Limit=20\u0026amp;Nonce=11886\u0026amp;Offset=0\u0026amp;Region=ap-guangzhou\u0026amp;SecretId=AKID********************************\u0026amp;Timestamp=1465185768\u0026amp;Version=2017-03-12\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\\n\u003ch3 id=\\\"2.4.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2\\\"\u003e2.4. 生成签名串\u003c/h3\u003e\u003cp\u003e此步骤生成签名串。\u003cbr\u003e首先使用 HMAC-SHA1 算法对上一步中获得的\u003cstrong\u003e签名原文字符串\u003c/strong\u003e进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。\u003c/p\u003e\\n\u003cp\u003e具体代码如下,以 PHP 语言为例:\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode\u003e$secretKey = \u0026#39;********************************\u0026#39;;\\n$srcStr = \u0026#39;GETcvm.tencentcloudapi.com/?Action=DescribeInstances\u0026amp;InstanceIds.0=ins-09dx96dg\u0026amp;Limit=20\u0026amp;Nonce=11886\u0026amp;Offset=0\u0026amp;Region=ap-guangzhou\u0026amp;SecretId=AKID********************************\u0026amp;Timestamp=1465185768\u0026amp;Version=2017-03-12\u0026#39;;\\n$signStr = base64_encode(hash_hmac(\u0026#39;sha1\u0026#39;, $srcStr, $secretKey, true));\\necho $signStr;\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\\n\u003cp\u003e最终得到的签名串为:\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode\u003e7RAM2xfNMO9EiVTNmPg06MRnCvQ=\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\\n\u003cp\u003e使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。\u003c/p\u003e\\n\u003ch2 id=\\\"3.-.E7.AD.BE.E5.90.8D.E4.B8.B2.E7.BC.96.E7.A0.81\\\"\u003e3. 签名串编码\u003c/h2\u003e\u003cp\u003e生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。\u003c/p\u003e\\n\u003cp\u003e如上一步生成的签名串为 7RAM2xfNMO9EiVTNmPg06MRnCvQ= ,最终得到的签名串请求参数(Signature)为:7RAM2xfNMO9EiVTNmPg06MRnCvQ%3D,它将用于生成最终的请求 URL。\u003c/p\u003e\\n\u003cp\u003e\u003cstrong\u003e注意:如果用户的请求方法是 GET,或者请求方法为 POST 同时 Content-Type 为 application/x-www-form-urlencoded,则发送请求时所有请求参数的值均需要做 URL 编码,参数键和=符号不需要编码。非 ASCII 字符在 URL 编码前需要先以 UTF-8 进行编码。\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003e\u003cstrong\u003e注意:有些编程语言的网络库会自动为所有参数进行 urlencode,在这种情况下,就不需要对签名串进行 URL 编码了,否则两次 URL 编码会导致签名失败。\u003c/strong\u003e\u003c/p\u003e\\n\u003cp\u003e\u003cstrong\u003e注意:其他参数值也需要进行编码,编码采用 \u003ca href=\\\"http://tools.ietf.org/html/rfc3986\\\"\u003eRFC 3986\u003c/a\u003e。使用 %XY 对特殊字符例如汉字进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F),使用小写将引发错误。\u003c/strong\u003e\u003c/p\u003e\\n\u003ch2 id=\\\"4.-.E7.AD.BE.E5.90.8D.E5.A4.B1.E8.B4.A5\\\"\u003e4. 签名失败\u003c/h2\u003e\u003cp\u003e根据实际情况,存在以下签名失败的错误码,请根据实际情况处理。\u003c/p\u003e\\n\u003ctable\u003e\\n\u003cthead\u003e\\n\u003ctr\u003e\\n\u003cth\u003e错误代码\u003c/th\u003e\\n\u003cth\u003e错误描述\u003c/th\u003e\\n\u003c/tr\u003e\\n\u003c/thead\u003e\\n\u003ctbody\u003e\u003ctr\u003e\\n\u003ctd\u003eAuthFailure.SignatureExpire\u003c/td\u003e\\n\u003ctd\u003e签名过期\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eAuthFailure.SecretIdNotFound\u003c/td\u003e\\n\u003ctd\u003e密钥不存在\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eAuthFailure.SignatureFailure\u003c/td\u003e\\n\u003ctd\u003e签名错误\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eAuthFailure.TokenFailure\u003c/td\u003e\\n\u003ctd\u003etoken 错误\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003ctr\u003e\\n\u003ctd\u003eAuthFailure.InvalidSecretId\u003c/td\u003e\\n\u003ctd\u003e密钥非法(不是云 API 密钥类型)\u003c/td\u003e\\n\u003c/tr\u003e\\n\u003c/tbody\u003e\u003c/table\u003e\\n\u003ch2 id=\\\"5.-.E7.AD.BE.E5.90.8D.E6.BC.94.E7.A4.BA\\\"\u003e5. 签名演示\u003c/h2\u003e\u003cp\u003e在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 \u003ca href=\\\"https://cloud.tencent.com/document/sdk\\\"\u003eSDK 中心\u003c/a\u003e。当前支持的编程语言有:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-python\\\"\u003ePython\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-java\\\"\u003eJava\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-php\\\"\u003ePHP\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-go\\\"\u003eGo\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-nodejs\\\"\u003eNodeJS\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-dotnet\\\"\u003e.NET\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-cpp\\\"\u003eC++\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/tencentcloud-sdk-ruby\\\"\u003eRuby\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003e下面提供了不同产品的生成签名 demo,您可以找到对应的产品参考签名的生成:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ca href=\\\"https://github.com/TencentCloud/signature-process-demo\\\"\u003eSignature Demo\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003e为了更清楚的解释签名过程,下面以实际编程语言为例,将上述的签名过程具体实现。请求的域名、调用的接口和参数的取值都以上述签名过程为准,代码只为解释签名过程,并不具备通用性,实际开发请尽量使用 SDK 。\u003c/p\u003e\\n\u003cp\u003e最终输出的 url 可能为:\u003ccode\u003ehttps://cvm.tencentcloudapi.com/?Action=DescribeInstances\u0026amp;InstanceIds.0=ins-09dx96dg\u0026amp;Limit=20\u0026amp;Nonce=11886\u0026amp;Offset=0\u0026amp;Region=ap-guangzhou\u0026amp;SecretId=AKID********************************\u0026amp;Signature=7RAM2xfNMO9EiVTNmPg06MRnCvQ%3D\u0026amp;Timestamp=1465185768\u0026amp;Version=2017-03-12\u003c/code\u003e。\u003c/p\u003e\\n\u003cp\u003e注意:由于示例中的密钥是虚构的,时间戳也不是系统当前时间,因此如果将此 url 在浏览器中打开或者用 curl 等命令调用时会返回鉴权错误:签名过期。为了得到一个可以正常返回的 url ,需要修改示例中的 SecretId 和 SecretKey 为真实的密钥,并使用系统当前时间戳作为 Timestamp 。\u003c/p\u003e\\n\u003cp\u003e注意:在下面的示例中,不同编程语言,甚至同一语言每次执行得到的 url 可能都有所不同,表现为参数的顺序不同,但这并不影响正确性。只要所有参数都在,且签名计算正确即可。\u003c/p\u003e\\n\u003cp\u003e注意:以下代码仅适用于 API 3.0,不能直接用于其他的签名流程,请以对应的实际文档为准。\u003c/p\u003e\\n\u003ch3 id=\\\"Java\\\"\u003eJava\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-java\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e java.io.UnsupportedEncodingException;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e java.net.URLEncoder;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e java.util.Random;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e java.util.TreeMap;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e javax.crypto.Mac;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e javax.crypto.spec.SecretKeySpec;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e javax.xml.bind.DatatypeConverter;\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003eclass\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eTencentCloudAPIDemo\u003c/span\u003e {\\n \u003cspan class=\\\"hljs-keyword\\\"\u003eprivate\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003efinal\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e \u003cspan class=\\\"hljs-type\\\"\u003eString\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003eCHARSET\u003c/span\u003e \u003cspan class=\\\"hljs-operator\\\"\u003e=\u003c/span\u003e \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;UTF-8\u0026quot;\u003c/span\u003e;\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e String \u003cspan class=\\\"hljs-title function_\\\"\u003esign\u003c/span\u003e\u003cspan class=\\\"hljs-params\\\"\u003e(String s, String key, String method)\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003ethrows\u003c/span\u003e Exception {\\n \u003cspan class=\\\"hljs-type\\\"\u003eMac\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003emac\u003c/span\u003e \u003cspan class=\\\"hljs-operator\\\"\u003e=\u003c/span\u003e Mac.getInstance(method);\\n \u003cspan class=\\\"hljs-type\\\"\u003eSecretKeySpec\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003esecretKeySpec\u003c/span\u003e \u003cspan class=\\\"hljs-operator\\\"\u003e=\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eSecretKeySpec\u003c/span\u003e(key.getBytes(CHARSET), mac.getAlgorithm());\\n mac.init(secretKeySpec);\\n \u003cspan class=\\\"hljs-type\\\"\u003ebyte\u003c/span\u003e[] hash = mac.doFinal(s.getBytes(CHARSET));\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e DatatypeConverter.printBase64Binary(hash);\\n }\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e String \u003cspan class=\\\"hljs-title function_\\\"\u003egetStringToSign\u003c/span\u003e\u003cspan class=\\\"hljs-params\\\"\u003e(TreeMap\u0026lt;String, Object\u0026gt; params)\u003c/span\u003e {\\n \u003cspan class=\\\"hljs-type\\\"\u003eStringBuilder\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003es2s\u003c/span\u003e \u003cspan class=\\\"hljs-operator\\\"\u003e=\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eStringBuilder\u003c/span\u003e(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GETcvm.tencentcloudapi.com/?\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 签名时要求对参数进行字典排序,此处用TreeMap保证顺序\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e (String k : params.keySet()) {\\n s2s.append(k).append(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;=\u0026quot;\u003c/span\u003e).append(params.get(k).toString()).append(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e);\\n }\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e s2s.toString().substring(\u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e, s2s.length() - \u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e);\\n }\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e String \u003cspan class=\\\"hljs-title function_\\\"\u003egetUrl\u003c/span\u003e\u003cspan class=\\\"hljs-params\\\"\u003e(TreeMap\u0026lt;String, Object\u0026gt; params)\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003ethrows\u003c/span\u003e UnsupportedEncodingException {\\n \u003cspan class=\\\"hljs-type\\\"\u003eStringBuilder\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003eurl\u003c/span\u003e \u003cspan class=\\\"hljs-operator\\\"\u003e=\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eStringBuilder\u003c/span\u003e(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;https://cvm.tencentcloudapi.com/?\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 实际请求的url中对参数顺序没有要求\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e (String k : params.keySet()) {\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要对请求串进行urlencode,由于key都是英文字母,故此处仅对其value进行urlencode\u003c/span\u003e\\n url.append(k).append(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;=\u0026quot;\u003c/span\u003e).append(URLEncoder.encode(params.get(k).toString(), CHARSET)).append(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e);\\n }\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e url.toString().substring(\u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e, url.length() - \u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e);\\n }\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003evoid\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003emain\u003c/span\u003e\u003cspan class=\\\"hljs-params\\\"\u003e(String[] args)\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003ethrows\u003c/span\u003e Exception {\\n TreeMap\u0026lt;String, Object\u0026gt; params = \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eTreeMap\u003c/span\u003e\u0026lt;String, Object\u0026gt;(); \u003cspan class=\\\"hljs-comment\\\"\u003e// TreeMap可以自动排序\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 实际调用时应当使用随机数,例如:params.put(\u0026quot;Nonce\u0026quot;, new Random().nextInt(java.lang.Integer.MAX_VALUE));\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Nonce\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e11886\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 实际调用时应当使用系统当前时间,例如: params.put(\u0026quot;Timestamp\u0026quot;, System.currentTimeMillis() / 1000);\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Timestamp\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;SecretId\u0026quot;\u003c/span\u003e, System.getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e)); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Action\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;DescribeInstances\u0026quot;\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Version\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;2017-03-12\u0026quot;\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Region\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ap-guangzhou\u0026quot;\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Limit\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 业务参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Offset\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 业务参数\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;InstanceIds.0\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ins-09dx96dg\u0026quot;\u003c/span\u003e); \u003cspan class=\\\"hljs-comment\\\"\u003e// 业务参数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\n params.put(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Signature\u0026quot;\u003c/span\u003e, sign(getStringToSign(params), System.getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e), \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;HmacSHA1\u0026quot;\u003c/span\u003e)); \u003cspan class=\\\"hljs-comment\\\"\u003e// 公共参数\u003c/span\u003e\\n System.out.println(getUrl(params));\\n }\\n}\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"Python\\\"\u003ePython\u003c/h3\u003e\u003cp\u003e注意:如果是在 Python 2 环境中运行,需要先安装 requests 依赖包: \u003ccode\u003epip install requests\u003c/code\u003e 。\u003c/p\u003e\\n\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-python\\\"\u003e\u003cspan class=\\\"hljs-comment\\\"\u003e# -*- coding: utf8 -*-\u003c/span\u003e\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e base64\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e hashlib\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e hmac\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e os\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e time\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e requests\\n\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\nsecret_id = os.environ.get(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e)\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\nsecret_key = os.environ.get(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e)\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003edef\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003eget_string_to_sign\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003emethod, endpoint, params\u003c/span\u003e):\\n s = method + endpoint + \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;/?\u0026quot;\u003c/span\u003e\\n query_str = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e.join(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;%s=%s\u0026quot;\u003c/span\u003e % (k, params[k]) \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e k \u003cspan class=\\\"hljs-keyword\\\"\u003ein\u003c/span\u003e \u003cspan class=\\\"hljs-built_in\\\"\u003esorted\u003c/span\u003e(params))\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e s + query_str\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003edef\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003esign_str\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003ekey, s, method\u003c/span\u003e):\\n hmac_str = hmac.new(key.encode(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;utf8\u0026quot;\u003c/span\u003e), s.encode(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;utf8\u0026quot;\u003c/span\u003e), method).digest()\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e base64.b64encode(hmac_str)\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eif\u003c/span\u003e __name__ == \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;__main__\u0026#x27;\u003c/span\u003e:\\n endpoint = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;cvm.tencentcloudapi.com\u0026quot;\u003c/span\u003e\\n data = {\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Action\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;DescribeInstances\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;InstanceIds.0\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;ins-09dx96dg\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Limit\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Nonce\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-number\\\"\u003e11886\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Offset\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Region\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;ap-guangzhou\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;SecretId\u0026#x27;\u003c/span\u003e : secret_id,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Timestamp\u0026#x27;\u003c/span\u003e : \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e, \u003cspan class=\\\"hljs-comment\\\"\u003e# int(time.time())\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Version\u0026#x27;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;2017-03-12\u0026#x27;\u003c/span\u003e\\n }\\n s = get_string_to_sign(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GET\u0026quot;\u003c/span\u003e, endpoint, data)\\n data[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Signature\u0026quot;\u003c/span\u003e] = sign_str(secret_key, s, hashlib.sha1)\\n \u003cspan class=\\\"hljs-built_in\\\"\u003eprint\u003c/span\u003e(data[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Signature\u0026quot;\u003c/span\u003e])\\n \u003cspan class=\\\"hljs-comment\\\"\u003e# 此处会实际调用,成功后可能产生计费\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e# resp = requests.get(\u0026quot;https://\u0026quot; + endpoint, params=data)\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e# print(resp.url)\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"Golang\\\"\u003eGolang\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-go\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003epackage\u003c/span\u003e main\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eimport\u003c/span\u003e (\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;bytes\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;crypto/hmac\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;crypto/sha1\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;encoding/base64\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;fmt\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;os\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;sort\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;strconv\u0026quot;\u003c/span\u003e\\n)\\n\\n\u003cspan class=\\\"hljs-function\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003efunc\u003c/span\u003e \u003cspan class=\\\"hljs-title\\\"\u003emain\u003c/span\u003e\u003cspan class=\\\"hljs-params\\\"\u003e()\u003c/span\u003e\u003c/span\u003e {\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\n secretId := os.Getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e)\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\n secretKey := os.Getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e)\\n params := \u003cspan class=\\\"hljs-keyword\\\"\u003emap\u003c/span\u003e[\u003cspan class=\\\"hljs-keyword\\\"\u003estring\u003c/span\u003e]\u003cspan class=\\\"hljs-keyword\\\"\u003estring\u003c/span\u003e{\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Nonce\u0026quot;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;11886\u0026quot;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Timestamp\u0026quot;\u003c/span\u003e: strconv.Itoa(\u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e),\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Region\u0026quot;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ap-guangzhou\u0026quot;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;SecretId\u0026quot;\u003c/span\u003e: secretId,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Version\u0026quot;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;2017-03-12\u0026quot;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Action\u0026quot;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;DescribeInstances\u0026quot;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;InstanceIds.0\u0026quot;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ins-09dx96dg\u0026quot;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Limit\u0026quot;\u003c/span\u003e: strconv.Itoa(\u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e),\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Offset\u0026quot;\u003c/span\u003e: strconv.Itoa(\u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e),\\n }\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003evar\u003c/span\u003e buf bytes.Buffer\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GET\u0026quot;\u003c/span\u003e)\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;cvm.tencentcloudapi.com\u0026quot;\u003c/span\u003e)\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;/\u0026quot;\u003c/span\u003e)\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;?\u0026quot;\u003c/span\u003e)\\n\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// sort keys by ascii asc order\u003c/span\u003e\\n keys := \u003cspan class=\\\"hljs-built_in\\\"\u003emake\u003c/span\u003e([]\u003cspan class=\\\"hljs-keyword\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003elen\u003c/span\u003e(params))\\n \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e k, _ := \u003cspan class=\\\"hljs-keyword\\\"\u003erange\u003c/span\u003e params {\\n keys = \u003cspan class=\\\"hljs-built_in\\\"\u003eappend\u003c/span\u003e(keys, k)\\n }\\n sort.Strings(keys)\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e i := \u003cspan class=\\\"hljs-keyword\\\"\u003erange\u003c/span\u003e keys {\\n k := keys[i]\\n buf.WriteString(k)\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;=\u0026quot;\u003c/span\u003e)\\n buf.WriteString(params[k])\\n buf.WriteString(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e)\\n }\\n buf.Truncate(buf.Len() - \u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e)\\n\\n hashed := hmac.New(sha1.New, []\u003cspan class=\\\"hljs-keyword\\\"\u003ebyte\u003c/span\u003e(secretKey))\\n hashed.Write(buf.Bytes())\\n\\n fmt.Println(base64.StdEncoding.EncodeToString(hashed.Sum(\u003cspan class=\\\"hljs-literal\\\"\u003enil\u003c/span\u003e)))\\n}\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"PHP\\\"\u003ePHP\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-php\\\"\u003e\u003cspan class=\\\"hljs-meta\\\"\u003e\u0026lt;?php\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$secretId\u003c/span\u003e = getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e);\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$secretKey\u003c/span\u003e = getenv(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e);\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Nonce\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e11886\u003c/span\u003e;\u003cspan class=\\\"hljs-comment\\\"\u003e//rand();\u003c/span\u003e\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Timestamp\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e;\u003cspan class=\\\"hljs-comment\\\"\u003e//time();\u003c/span\u003e\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Region\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ap-guangzhou\u0026quot;\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;SecretId\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-variable\\\"\u003e$secretId\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Version\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;2017-03-12\u0026quot;\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Action\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;DescribeInstances\u0026quot;\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;InstanceIds.0\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ins-09dx96dg\u0026quot;\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Limit\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Offset\u0026quot;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e;\\n\\nksort(\u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e);\\n\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GETcvm.tencentcloudapi.com/?\u0026quot;\u003c/span\u003e;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eforeach\u003c/span\u003e ( \u003cspan class=\\\"hljs-variable\\\"\u003e$param\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003eas\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003e$key\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-variable\\\"\u003e$value\u003c/span\u003e ) {\\n \u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e = \u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e . \u003cspan class=\\\"hljs-variable\\\"\u003e$key\u003c/span\u003e . \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;=\u0026quot;\u003c/span\u003e . \u003cspan class=\\\"hljs-variable\\\"\u003e$value\u003c/span\u003e . \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e;\\n}\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e = substr(\u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e, \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e, -\u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e);\\n\\n\u003cspan class=\\\"hljs-variable\\\"\u003e$signature\u003c/span\u003e = base64_encode(hash_hmac(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;sha1\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-variable\\\"\u003e$signStr\u003c/span\u003e, \u003cspan class=\\\"hljs-variable\\\"\u003e$secretKey\u003c/span\u003e, \u003cspan class=\\\"hljs-literal\\\"\u003etrue\u003c/span\u003e));\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eecho\u003c/span\u003e \u003cspan class=\\\"hljs-variable\\\"\u003e$signature\u003c/span\u003e.PHP_EOL;\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// need to install and enable curl extension in php.ini\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// $param[\u0026quot;Signature\u0026quot;] = $signature;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// $url = \u0026quot;https://cvm.tencentcloudapi.com/?\u0026quot;.http_build_query($param);\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// echo $url.PHP_EOL;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// $ch = curl_init();\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// curl_setopt($ch, CURLOPT_URL, $url);\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// $output = curl_exec($ch);\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// curl_close($ch);\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e// echo json_decode($output);\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"Ruby\\\"\u003eRuby\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-ruby\\\"\u003e\u003cspan class=\\\"hljs-comment\\\"\u003e# -*- coding: UTF-8 -*-\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# require ruby\u0026gt;=2.3.0\u003c/span\u003e\\n\u003cspan class=\\\"hljs-keyword\\\"\u003erequire\u003c/span\u003e \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;time\u0026#x27;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-keyword\\\"\u003erequire\u003c/span\u003e \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;openssl\u0026#x27;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-keyword\\\"\u003erequire\u003c/span\u003e \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;base64\u0026#x27;\u003c/span\u003e\\n\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\nsecret_id = ENV[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e]\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\nsecret_key = ENV[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e]\\n\\nmethod = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;GET\u0026#x27;\u003c/span\u003e\\nendpoint = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;cvm.tencentcloudapi.com\u0026#x27;\u003c/span\u003e\\ndata = {\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Action\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;DescribeInstances\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;InstanceIds.0\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;ins-09dx96dg\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Limit\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Nonce\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-number\\\"\u003e11886\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Offset\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Region\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;ap-guangzhou\u0026#x27;\u003c/span\u003e,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;SecretId\u0026#x27;\u003c/span\u003e =\u0026gt; secret_id,\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Timestamp\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e, \u003cspan class=\\\"hljs-comment\\\"\u003e# Time.now.to_i\u003c/span\u003e\\n \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Version\u0026#x27;\u003c/span\u003e =\u0026gt; \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;2017-03-12\u0026#x27;\u003c/span\u003e,\\n}\\nsign = method + endpoint + \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;/?\u0026#x27;\u003c/span\u003e\\nparams = []\\ndata.sort.each \u003cspan class=\\\"hljs-keyword\\\"\u003edo\u003c/span\u003e \u003cspan class=\\\"hljs-params\\\"\u003e|item|\u003c/span\u003e\\n params \u0026lt;\u0026lt; \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u003cspan class=\\\"hljs-subst\\\"\u003e#{item[\u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e]}\u003c/span\u003e=\u003cspan class=\\\"hljs-subst\\\"\u003e#{item[\u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e]}\u003c/span\u003e\u0026quot;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eend\u003c/span\u003e\\nsign += params.join(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;\u0026amp;\u0026#x27;\u003c/span\u003e)\\ndigest = OpenSSL::Digest.new(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;sha1\u0026#x27;\u003c/span\u003e)\\ndata[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e] = Base64.encode64(OpenSSL::HMAC.digest(digest, secret_key, sign))\\nputs data[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e]\\n\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# require \u0026#x27;net/http\u0026#x27;\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# uri = URI(\u0026#x27;https://\u0026#x27; + endpoint)\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# uri.query = URI.encode_www_form(data)\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# p uri\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# res = Net::HTTP.get_response(uri)\u003c/span\u003e\\n\u003cspan class=\\\"hljs-comment\\\"\u003e# puts res.body\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"DotNet\\\"\u003eDotNet\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-csharp\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e System;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e System.Collections.Generic;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e System.Net;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e System.Security.Cryptography;\\n\u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e System.Text;\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003eclass\u003c/span\u003e \u003cspan class=\\\"hljs-title\\\"\u003eApplication\u003c/span\u003e {\\n \u003cspan class=\\\"hljs-function\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e \u003cspan class=\\\"hljs-title\\\"\u003eSign\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003e\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e signKey, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e secret\u003c/span\u003e)\u003c/span\u003e\\n {\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e signRet = \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e.Empty;\\n \u003cspan class=\\\"hljs-keyword\\\"\u003eusing\u003c/span\u003e (HMACSHA1 mac = \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e HMACSHA1(Encoding.UTF8.GetBytes(signKey)))\\n {\\n \u003cspan class=\\\"hljs-built_in\\\"\u003ebyte\u003c/span\u003e[] hash = mac.ComputeHash(Encoding.UTF8.GetBytes(secret));\\n signRet = Convert.ToBase64String(hash);\\n }\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e signRet;\\n }\\n \u003cspan class=\\\"hljs-function\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e \u003cspan class=\\\"hljs-title\\\"\u003eMakeSignPlainText\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003eSortedDictionary\u0026lt;\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e\u0026gt; requestParams, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e requestMethod, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e requestHost, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e requestPath\u003c/span\u003e)\u003c/span\u003e\\n {\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e retStr = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026quot;\u003c/span\u003e;\\n retStr += requestMethod;\\n retStr += requestHost;\\n retStr += requestPath;\\n retStr += \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;?\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e v = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-keyword\\\"\u003eforeach\u003c/span\u003e (\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e key \u003cspan class=\\\"hljs-keyword\\\"\u003ein\u003c/span\u003e requestParams.Keys)\\n {\\n v += \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e.Format(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;{0}={1}\u0026amp;\u0026quot;\u003c/span\u003e, key, requestParams[key]);\\n }\\n retStr += v.TrimEnd(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;\u0026amp;\u0026#x27;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e retStr;\\n }\\n\\n \u003cspan class=\\\"hljs-function\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003epublic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003estatic\u003c/span\u003e \u003cspan class=\\\"hljs-keyword\\\"\u003evoid\u003c/span\u003e \u003cspan class=\\\"hljs-title\\\"\u003eMain\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003e\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e[] args\u003c/span\u003e)\u003c/span\u003e\\n {\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 密钥参数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e SECRET_ID = Environment.GetEnvironmentVariable(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_ID\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e SECRET_KEY = Environment.GetEnvironmentVariable(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;TENCENTCLOUD_SECRET_KEY\u0026quot;\u003c/span\u003e);\\n\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e endpoint = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;cvm.tencentcloudapi.com\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e region = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ap-guangzhou\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e action = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;DescribeInstances\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e version = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;2017-03-12\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-built_in\\\"\u003edouble\u003c/span\u003e RequestTimestamp = \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e; \u003cspan class=\\\"hljs-comment\\\"\u003e// 时间戳 2019-02-26 00:44:25,此参数作为示例,以实际为准\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// long timestamp = ToTimestamp() / 1000;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// string requestTimestamp = timestamp.ToString();\u003c/span\u003e\\n Dictionary\u0026lt;\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e\u0026gt; param = \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e Dictionary\u0026lt;\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e\u0026gt;();\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Limit\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;20\u0026quot;\u003c/span\u003e);\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Offset\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;0\u0026quot;\u003c/span\u003e);\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;InstanceIds.0\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ins-09dx96dg\u0026quot;\u003c/span\u003e);\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Action\u0026quot;\u003c/span\u003e, action);\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Nonce\u0026quot;\u003c/span\u003e, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;11886\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// param.Add(\u0026quot;Nonce\u0026quot;, Math.Abs(new Random().Next()).ToString());\u003c/span\u003e\\n\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Timestamp\u0026quot;\u003c/span\u003e, RequestTimestamp.ToString());\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Version\u0026quot;\u003c/span\u003e, version);\\n\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;SecretId\u0026quot;\u003c/span\u003e, SECRET_ID);\\n param.Add(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;Region\u0026quot;\u003c/span\u003e, region);\\n SortedDictionary\u0026lt;\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e\u0026gt; headers = \u003cspan class=\\\"hljs-keyword\\\"\u003enew\u003c/span\u003e SortedDictionary\u0026lt;\u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e, \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e\u0026gt;(param, StringComparer.Ordinal);\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e sigInParam = MakeSignPlainText(headers, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GET\u0026quot;\u003c/span\u003e, endpoint, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;/\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-built_in\\\"\u003estring\u003c/span\u003e sigOutParam = Sign(SECRET_KEY, sigInParam);\\n Console.WriteLine(sigOutParam);\\n }\\n}\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch3 id=\\\"NodeJS\\\"\u003eNodeJS\u003c/h3\u003e\u003cp\u003e\u003cpre\u003e\u003ccode class=\\\"language-javascript\\\"\u003e\u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e crypto = \u003cspan class=\\\"hljs-built_in\\\"\u003erequire\u003c/span\u003e(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;crypto\u0026#x27;\u003c/span\u003e);\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003efunction\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003eget_req_url\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003eparams, endpoint\u003c/span\u003e){\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-built_in\\\"\u003eencodeURIComponent\u003c/span\u003e(params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e]);\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e url_strParam = \u003cspan class=\\\"hljs-title function_\\\"\u003esort_params\u003c/span\u003e(params)\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;https://\u0026quot;\u003c/span\u003e + endpoint + \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;/?\u0026quot;\u003c/span\u003e + url_strParam.\u003cspan class=\\\"hljs-title function_\\\"\u003eslice\u003c/span\u003e(\u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e);\\n}\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003efunction\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003eformatSignString\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003ereqMethod, endpoint, path, strParam\u003c/span\u003e){\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e strSign = reqMethod + endpoint + path + \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;?\u0026quot;\u003c/span\u003e + strParam.\u003cspan class=\\\"hljs-title function_\\\"\u003eslice\u003c/span\u003e(\u003cspan class=\\\"hljs-number\\\"\u003e1\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e strSign;\\n}\\n\u003cspan class=\\\"hljs-keyword\\\"\u003efunction\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003esha1\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003esecretKey, strsign\u003c/span\u003e){\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e signMethodMap = {\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;HmacSHA1\u0026#x27;\u003c/span\u003e: \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;sha1\u0026quot;\u003c/span\u003e};\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e hmac = crypto.\u003cspan class=\\\"hljs-title function_\\\"\u003ecreateHmac\u003c/span\u003e(signMethodMap[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;HmacSHA1\u0026#x27;\u003c/span\u003e], secretKey || \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026quot;\u003c/span\u003e);\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e hmac.\u003cspan class=\\\"hljs-title function_\\\"\u003eupdate\u003c/span\u003e(\u003cspan class=\\\"hljs-title class_\\\"\u003eBuffer\u003c/span\u003e.\u003cspan class=\\\"hljs-title function_\\\"\u003efrom\u003c/span\u003e(strsign, \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;utf8\u0026#x27;\u003c/span\u003e)).\u003cspan class=\\\"hljs-title function_\\\"\u003edigest\u003c/span\u003e(\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;base64\u0026#x27;\u003c/span\u003e)\\n}\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003efunction\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003esort_params\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003eparams\u003c/span\u003e){\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e strParam = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e keys = \u003cspan class=\\\"hljs-title class_\\\"\u003eObject\u003c/span\u003e.\u003cspan class=\\\"hljs-title function_\\\"\u003ekeys\u003c/span\u003e(params);\\n keys.\u003cspan class=\\\"hljs-title function_\\\"\u003esort\u003c/span\u003e();\\n \u003cspan class=\\\"hljs-keyword\\\"\u003efor\u003c/span\u003e (\u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e k \u003cspan class=\\\"hljs-keyword\\\"\u003ein\u003c/span\u003e keys) {\\n \u003cspan class=\\\"hljs-comment\\\"\u003e//k = k.replace(/_/g, \u0026#x27;.\u0026#x27;);\u003c/span\u003e\\n strParam += (\u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;\u0026amp;\u0026quot;\u003c/span\u003e + keys[k] + \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;=\u0026quot;\u003c/span\u003e + params[keys[k]]);\\n }\\n \u003cspan class=\\\"hljs-keyword\\\"\u003ereturn\u003c/span\u003e strParam\\n}\\n\\n\u003cspan class=\\\"hljs-keyword\\\"\u003efunction\u003c/span\u003e \u003cspan class=\\\"hljs-title function_\\\"\u003emain\u003c/span\u003e(\u003cspan class=\\\"hljs-params\\\"\u003e\u003c/span\u003e){\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 密钥参数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_ID,值为示例的 AKID********************************\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-variable constant_\\\"\u003eSECRET_ID\u003c/span\u003e = process.\u003cspan class=\\\"hljs-property\\\"\u003eenv\u003c/span\u003e.\u003cspan class=\\\"hljs-property\\\"\u003eTENCENTCLOUD_SECRET_ID\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 需要设置环境变量 TENCENTCLOUD_SECRET_KEY,值为示例的 ********************************\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-variable constant_\\\"\u003eSECRET_KEY\u003c/span\u003e = process.\u003cspan class=\\\"hljs-property\\\"\u003eenv\u003c/span\u003e.\u003cspan class=\\\"hljs-property\\\"\u003eTENCENTCLOUD_SECRET_KEY\u003c/span\u003e\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e endpoint = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;cvm.tencentcloudapi.com\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eRegion\u003c/span\u003e = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;ap-guangzhou\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eVersion\u003c/span\u003e = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;2017-03-12\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eAction\u003c/span\u003e = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;DescribeInstances\u0026quot;\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eTimestamp\u003c/span\u003e = \u003cspan class=\\\"hljs-number\\\"\u003e1465185768\u003c/span\u003e \u003cspan class=\\\"hljs-comment\\\"\u003e// 时间戳 2016-06-06 12:02:48, 此参数作为示例,以实际为准\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// const Timestamp = Math.round(Date.now() / 1000)\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e \u003cspan class=\\\"hljs-title class_\\\"\u003eNonce\u003c/span\u003e = \u003cspan class=\\\"hljs-number\\\"\u003e11886\u003c/span\u003e \u003cspan class=\\\"hljs-comment\\\"\u003e// 随机正整数\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e//const nonce = Math.round(Math.random() * 65535)\u003c/span\u003e\\n\\n \u003cspan class=\\\"hljs-keyword\\\"\u003elet\u003c/span\u003e params = {};\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Action\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title class_\\\"\u003eAction\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;InstanceIds.0\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;ins-09dx96dg\u0026#x27;\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Limit\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e20\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Offset\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-number\\\"\u003e0\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Nonce\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title class_\\\"\u003eNonce\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Region\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title class_\\\"\u003eRegion\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;SecretId\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-variable constant_\\\"\u003eSECRET_ID\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Timestamp\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title class_\\\"\u003eTimestamp\u003c/span\u003e;\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Version\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title class_\\\"\u003eVersion\u003c/span\u003e;\\n\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 1. 对参数排序,并拼接请求字符串\u003c/span\u003e\\n strParam = \u003cspan class=\\\"hljs-title function_\\\"\u003esort_params\u003c/span\u003e(params)\\n\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 2. 拼接签名原文字符串\u003c/span\u003e\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e reqMethod = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;GET\u0026quot;\u003c/span\u003e;\\n \u003cspan class=\\\"hljs-keyword\\\"\u003econst\u003c/span\u003e path = \u003cspan class=\\\"hljs-string\\\"\u003e\u0026quot;/\u0026quot;\u003c/span\u003e;\\n strSign = \u003cspan class=\\\"hljs-title function_\\\"\u003eformatSignString\u003c/span\u003e(reqMethod, endpoint, path, strParam)\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// console.log(strSign)\u003c/span\u003e\\n\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 3. 生成签名串\u003c/span\u003e\\n params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e] = \u003cspan class=\\\"hljs-title function_\\\"\u003esha1\u003c/span\u003e(\u003cspan class=\\\"hljs-variable constant_\\\"\u003eSECRET_KEY\u003c/span\u003e, strSign)\\n \u003cspan class=\\\"hljs-variable language_\\\"\u003econsole\u003c/span\u003e.\u003cspan class=\\\"hljs-title function_\\\"\u003elog\u003c/span\u003e(params[\u003cspan class=\\\"hljs-string\\\"\u003e\u0026#x27;Signature\u0026#x27;\u003c/span\u003e])\\n\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// 4. 进行url编码并拼接请求url\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// const req_url = get_req_url(params, endpoint)\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// console.log(params[\u0026#x27;Signature\u0026#x27;])\u003c/span\u003e\\n \u003cspan class=\\\"hljs-comment\\\"\u003e// console.log(req_url)\u003c/span\u003e\\n}\\n\u003cspan class=\\\"hljs-title function_\\\"\u003emain\u003c/span\u003e()\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\",\"showToc\":true,\"toc\":\"\u003cli\u003e\u003ca href=\\\"#1.-.E7.94.B3.E8.AF.B7.E5.AE.89.E5.85.A8.E5.87.AD.E8.AF.81\\\" title=\\\"1. 申请安全凭证\\\"\u003e1. 申请安全凭证\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#2.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2\\\" title=\\\"2. 生成签名串\\\"\u003e2. 生成签名串\u003c/a\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\\\"#2.1.-.E5.AF.B9.E5.8F.82.E6.95.B0.E6.8E.92.E5.BA.8F\\\" title=\\\"2.1. 对参数排序\\\"\u003e2.1. 对参数排序\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#2.2.-.E6.8B.BC.E6.8E.A5.E8.AF.B7.E6.B1.82.E5.AD.97.E7.AC.A6.E4.B8.B2\\\" title=\\\"2.2. 拼接请求字符串\\\"\u003e2.2. 拼接请求字符串\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#2.3.-.E6.8B.BC.E6.8E.A5.E7.AD.BE.E5.90.8D.E5.8E.9F.E6.96.87.E5.AD.97.E7.AC.A6.E4.B8.B2\\\" title=\\\"2.3. 拼接签名原文字符串\\\"\u003e2.3. 拼接签名原文字符串\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#2.4.-.E7.94.9F.E6.88.90.E7.AD.BE.E5.90.8D.E4.B8.B2\\\" title=\\\"2.4. 生成签名串\\\"\u003e2.4. 生成签名串\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#3.-.E7.AD.BE.E5.90.8D.E4.B8.B2.E7.BC.96.E7.A0.81\\\" title=\\\"3. 签名串编码\\\"\u003e3. 签名串编码\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#4.-.E7.AD.BE.E5.90.8D.E5.A4.B1.E8.B4.A5\\\" title=\\\"4. 签名失败\\\"\u003e4. 签名失败\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#5.-.E7.AD.BE.E5.90.8D.E6.BC.94.E7.A4.BA\\\" title=\\\"5. 签名演示\\\"\u003e5. 签名演示\u003c/a\u003e\u003cul\u003e\u003cli\u003e\u003ca href=\\\"#Java\\\" title=\\\"Java\\\"\u003eJava\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#Python\\\" title=\\\"Python\\\"\u003ePython\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#Golang\\\" title=\\\"Golang\\\"\u003eGolang\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#PHP\\\" title=\\\"PHP\\\"\u003ePHP\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#Ruby\\\" title=\\\"Ruby\\\"\u003eRuby\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#DotNet\\\" title=\\\"DotNet\\\"\u003eDotNet\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"#NodeJS\\\" title=\\\"NodeJS\\\"\u003eNodeJS\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/li\u003e\",\"recentReleaseTime\":\"2024-12-25 01:51:32\",\"videoConfig\":{},\"writeUrl\":null,\"isSlate\":false,\"writeNodeId\":\"\",\"displayEditEntry\":false,\"slate\":\"\"},\"relationConfig\":{},\"shareConfig\":{},\"advanced\":{}},\"relatedHotArticleList\":[]},\"staticContext\":{\"isMobile\":false,\"isMiniProgram\":false,\"isWechat\":false,\"isPreview\":false,\"originalUrl\":\"/document/api/849/52015\",\"CDN_DOMAIN\":\"cloudcache.tencent-cloud.com\",\"QCLOUD_DOMAIN\":\"cloud.tencent.com\",\"isLegalReferer\":true,\"ssrInfo\":{},\"language\":\"zh\",\"requestId\":\"W39XKSX4R\"}},\"0-0\":null},\"actionData\":null,\"errors\":null}");</script></div><script>window.isServerContext = false; window.isClientContext = true; window.$serverTime = 1740500092467; window.$clientTime = 1740500092467;</script><script> window.CDN_DOMAIN = 'cloudcache.tencent-cloud.com'; window.QCLOUD_DOMAIN = 'cloud.tencent.com'; window.language = 'zh'; window.ssrError = undefined </script><script src="//cloudcache.tencent-cloud.com/qcloud/developer/scripts/release/libs/dom4/1.8.3/dom4.js"></script><script src="//cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/raf/raf.js"></script><script>if (window.raf) window.raf.polyfill()</script><script src="//cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/libs/jsencrypt-standalone.min.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/babel/polyfill.6.26.min.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/react/react.16.8.6.min.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/react/react-dom.16.8.6.min.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/jquery-3.2.1.min.js"></script><div> <script> window.__QCPortalContext__ = { version: "0.4.0", resource: {}, $getCurrServerTime: (function(s, c) {return function(){return +new Date()+s-c;}})(1740500092463, +new Date()), } </script> <script src="https://cloudcache.tencent-cloud.com/qcloud/portal/kit/full.a51636fb1.js"></script> <script> if (window.QCPortalKit) { window.QCPortalKit.init({"topNav":{"fixed":true},"footer":{"mobileOnly":true},"floatBar":{"disable":true},"version":"v2","site":{"replaceUrlTLDScope":"page"}}) } </script> </div><script src="//cloud.tencent.com/qccomponent/login/api.js"></script><script src="//cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/vendors/clipboard.min.js"></script><script src="//cloudcache.tencent-cloud.com/qcloud/main/components/document-feedback/document-feedback.6df63d65d2.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/doc/scripts/document/app.99d80608.js"></script><script src="https://cloudcache.tencent-cloud.com/qcloud/main/scripts/release/common/deps/wechatJsSdk.js?version=1_0_1&max_age=31536000"></script><script>window.$render();</script><script src="//dscache.tencent-cloud.cn/ecache/qcstat/qcloud/qcloudStatApi.js" async=""></script></body></html>