展开

关键词

首页关键词11.11机器翻译哪家好

11.11机器翻译哪家好

相关内容

机器翻译

机器翻译

腾讯机器翻译(TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
  • 机器翻译

    产品概述,产品优势,应用场景,简介,API 概览,请求结构,公共参数,签名方法,返回结果,文本翻译,语种识别,语音翻译,更新历史,图片翻译,数据结构,签名方法 v3,错误码,请求限制,词汇表,常见问题,服务等级协议,计费概述,欠费说明,批量文本翻译,视频专区,联系我们,产品简介,产品概述,产品优势,API 文档,API接口,调用方式,请求结构,返回结果,应用场景,简介,API 概览,调用方式,请求结构,公共参数,签名方法,返回结果,API接口,文本翻译,语种识别,语音翻译,更新历史,图片翻译,数据结构,签名方法 v3,错误码,请求限制,词汇表,常见问题,服务等级协议,购买指南,计费概述,欠费说明,批量文本翻译,视频专区,联系我们
    来自:
  • 批量文本翻译

    错误码描述 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。 InternalError内部错误。
    来自:
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年50元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • 产品概述

    机器翻译(Tencent Machine Translation,TMT)是腾讯公司研发的人工智能机器翻译产品,基于自研的神经网络翻译引擎,能够从海量语料库中自主学习,在翻译的全过程中整体建模,从而达到翻译结果的高准确率与流畅度以下视频将为您介绍机器翻译的相关服务简介: 机器翻译目前支持 15 个语种,83 种语言的翻译能力,其中中英互译引擎已经在新闻、教育和部分科技领域达到业界领先水平。土耳其语、俄语、葡萄牙语、越南语、印尼语、马来语、泰语等15种语言文本的翻译服务,翻译内容经过大数据语料库、多种解码算法、翻译引擎深度优化,在新闻文章、生活口语等不同语言场景中都有深厚积累,同时融合统计机器翻译和神经网络机器翻译的优点
    来自:
  • 产品优势

    以下视频将为您介绍机器翻译的相关产品优势说明: 多引擎融合翻译引擎深度优化,集成翻译记忆技术,融合统计及神经网络等多种解码算法,翻译技术积累深厚。
    来自:
  • 应用场景

    以下视频将为您介绍机器翻译的服务应用场景及应用案例: 文档资料翻译对于合同、文件、资料、论文、邮件等文档类内容均可快速翻译。文章资讯阅读适合于快速获取国外资讯、文章阅读或将自有内容快速发布外文版本。
    来自:
  • 简介

    欢迎使用 机器翻译 API 3.0 版本。全新的 API 接口文档更加规范和全面,统一的参数风格和公共错误码,统一的 SDKCLI 版本与 API 文档严格一致,给您带来简单快捷的使用体验。更多腾讯云 API 3.0 使用介绍请查看:快速入门腾讯机器翻译(Tencent Machine Translation)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译
    来自:
  • API 概览

    API接口 接口名称接口功能 ImageTranslate图片翻译 LanguageDetect语种识别 SpeechTranslate语音翻译 TextTranslate文本翻译 TextTranslateBatch批量文本翻译
    来自:
  • 请求结构

    1. 服务地址API 支持就近地域接入,本产品就近地域接入域名为 tmt.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 tmt.ap-guangzhou.tencentcloudapi.com 。推荐使用就近地域接入域名。根据调用接口时客户端所在位置,会自动解析到最近的某个具体地域的服务器。例如在广州发起请求,会自动解析到广州的服务器,效果和指定 tmt.ap-guangzhou.tencentcloudapi.com 是一致的。注意:对时延敏感的业务,建议指定带地域的域名。注意:域名是 API 的接入点,并不代表产品或者接口实际提供服务的地域。产品支持的地域列表请在调用方式公共参数文档中查阅,接口支持的地域请在接口文档输入参数中查阅。目前支持的域名列表为: 接入地域域名 就近地域接入(推荐,只支持非金融区)tmt.tencentcloudapi.com 华南地区(广州)tmt.ap-guangzhou.tencentcloudapi.com 华东地区(上海)tmt.ap-shanghai.tencentcloudapi.com 华北地区(北京)tmt.ap-beijing.tencentcloudapi.com 西南地区(成都)tmt.ap-chengdu.tencentcloudapi.com 西南地区(重庆)tmt.ap-chongqing.tencentcloudapi.com 港澳台地区(中国香港)tmt.ap-hongkong.tencentcloudapi.com 亚太东南(新加坡)tmt.ap-singapore.tencentcloudapi.com 亚太东南(曼谷)tmt.ap-bangkok.tencentcloudapi.com 亚太南部(孟买)tmt.ap-mumbai.tencentcloudapi.com 亚太东北(首尔)tmt.ap-seoul.tencentcloudapi.com 亚太东北(东京)tmt.ap-tokyo.tencentcloudapi.com 美国东部(弗吉尼亚)tmt.na-ashburn.tencentcloudapi.com 美国西部(硅谷)tmt.na-siliconvalley.tencentcloudapi.com 北美地区(多伦多)tmt.na-toronto.tencentcloudapi.com 欧洲地区(法兰克福)tmt.eu-frankfurt.tencentcloudapi.com 欧洲地区(莫斯科)tmt.eu-moscow.tencentcloudapi.com 注意:由于金融区和非金融区是隔离不互通的,因此当访问金融区服务时(公共参数 Region 为金融区地域),需要同时指定带金融区地域的域名,最好和 Region 的地域保持一致。 金融区接入地域金融区域名 华东地区(上海金融)tmt.ap-shanghai-fsi.tencentcloudapi.com 华南地区(深圳金融)tmt.ap-shenzhen-fsi.tencentcloudapi.com 2. 通信协议腾讯云 API 的所有接口均通过 HTTPS 进行通信,提供高安全性的通信通道。3. 请求方法支持的 HTTP 请求方法: POST(推荐)GET POST 请求支持的 Content-Type 类型: applicationjson(推荐),必须使用签名方法 v3(TC3-HMAC-SHA256)。applicationx-www-form-urlencoded,必须使用签名方法 v1(HmacSHA1 或 HmacSHA256)。multipartform-data(仅部分接口支持),必须使用签名方法 v3(TC3-HMAC-SHA256)。 GET 请求的请求包大小不得超过32KB。POST 请求使用签名方法 v1(HmacSHA1、HmacSHA256)时不得超过1MB。POST 请求使用签名方法 v3(TC3-HMAC-SHA256)时支持10MB。4. 字符编码均使用UTF-8编码。
    来自:
  • 公共参数

    公共参数是用于标识用户和接口签名的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。公共参数的具体内容会因您使用的签名方法版本不同而有所差异。使用签名方法 v3 的公共参数签名方法 v3 (有时也称作 TC3-HMAC-SHA256)相比签名方法 v1 (有些文档可能会简称签名方法),更安全,支持更大的请求包,支持 POST JSON 格式,性能有一定提升,推荐使用该签名方法计算签名。完整介绍详见 文档。注意:接口文档中的示例由于目的是展示接口参数用法,简化起见,使用的是签名方法 v1 GET 请求,如果依旧想使用签名方法 v1 请参考下文章节。使用签名方法 v3 时,公共参数需要统一放到 HTTP Header 请求头部中,如下: 参数名称类型必选描述 X-TC-ActionString是操作的接口名称。取值参考接口文档中输入参数公共参数 Action 的说明。例如云服务器的查询实例列表接口,取值为 DescribeInstances。 X-TC-RegionString-地域参数,用来标识希望操作哪个地域的数据。接口接受的地域取值参考接口文档中输入参数公共参数 Region 的说明。注意:某些接口不需要传递该参数,接口文档中会对此特别说明,此时即使传递该参数也不会生效。 X-TC-TimestampInteger是当前 UNIX 时间戳,可记录发起 API 请求的时间。例如 1529223702。注意:如果与服务器时间相差超过5分钟,会引起签名过期错误。 X-TC-VersionString是操作的 API 的版本。取值参考接口文档中入参公共参数 Version 的说明。例如云服务器的版本 2017-03-12。 AuthorizationString是HTTP 标准身份认证头部字段,例如:TC3-HMAC-SHA256 Credential=AKIDEXAMPLEDateservicetc3_request, SignedHeaders=content-type;host, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024 其中,- TC3-HMAC-SHA256:签名方法,目前固定取该值;- Credential:签名凭证,AKIDEXAMPLE 是 SecretId;Date 是 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,通常为域名前缀,例如域名 cvm.tencentcloudapi.com 意味着产品名是 cvm。本产品取值为 tmt;- SignedHeaders:参与签名计算的头部信息,content-type 和 host 为必选头部;- Signature:签名摘要,计算过程详见 文档。 X-TC-TokenString否临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token。 X-TC-LanguageString否指定接口返回的语言,仅部分接口支持此参数。取值:zh-CN,en-US。zh-CN 返回中文,en-US 返回英文。 假设用户想要查询广州地域的云服务器实例列表中的前十个,接口参数设置为偏移量 Offset=0,返回数量 Limit=10,则其请求结构按照请求 URL、请求头部、请求体示例如下:HTTP GET 请求结构示例:https:cvm.tencentcloudapi.com?Limit=10&Offset=0 Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-10-09cvmtc3_request, SignedHeaders=content-type;host, Signature=5da7a33f6993f0614b047e5df4582db9e9bf4672ba50567dba16c6ccf174c474Content-Type: applicationx-www-form-urlencodedHost: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1539084154X-TC-Region: ap-guangzhouHTTP POST (applicationjson) 请求结构示例:https:cvm.tencentcloudapi.com Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-05-30cvmtc3_request, SignedHeaders=content-type;host, Signature=582c400e06b5924a6f2b5d7d672d79c15b13162d9279b0855cfba6789a8edb4cContent-Type: applicationjsonHost: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1527672334X-TC-Region: ap-guangzhou {"Offset":0,"Limit":10}HTTP POST (multipartform-data)请求结构示例(仅特定的接口支持):https:cvm.tencentcloudapi.com Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-05-30cvmtc3_request, SignedHeaders=content-type;host, Signature=582c400e06b5924a6f2b5d7d672d79c15b13162d9279b0855cfba6789a8edb4cContent-Type: multipartform-data; boundary=58731222010402Host: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1527672334X-TC-Region: ap-guangzhou --58731222010402Content-Disposition: form-data; name="Offset" 0--58731222010402Content-Disposition: form-data; name="Limit" 10--58731222010402--使用签名方法 v1 的公共参数使用签名方法 v1 (有时会称作 HmacSHA256 和 HmacSHA1),公共参数需要统一放到请求串中,完整介绍详见文档 参数名称类型必选描述 ActionString是操作的接口名称。取值参考接口文档中输入参数公共参数 Action 的说明。例如云服务器的查询实例列表接口,取值为 DescribeInstances。 RegionString-地域参数,用来标识希望操作哪个地域的数据。接口接受的地域取值参考接口文档中输入参数公共参数 Region 的说明。注意:某些接口不需要传递该参数,接口文档中会对此特别说明,此时即使传递该参数也不会生效。 TimestampInteger是当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误。 NonceInteger是随机正整数,与 Timestamp 联合起来,用于防止重放攻击。 SecretIdString是在 云API密钥 上申请的标识身份的 SecretId,一个 SecretId 对应唯一的 SecretKey ,而 SecretKey 会用来生成请求签名 Signature。 SignatureString是请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。具体计算方法参见 文档。 VersionString是操作的 API 的版本。取值参考接口文档中入参公共参数 Version 的说明。例如云服务器的版本 2017-03-12。 SignatureMethodString否签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。 TokenString否临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token 。 LanguageString否指定接口返回的语言,仅部分接口支持此参数。取值:zh-CN,en-US。zh-CN 返回中文,en-US 返回英文。 假设用户想要查询广州地域的云服务器实例列表,其请求结构按照请求 URL、请求头部、请求体示例如下:HTTP GET 请求结构示例:https:cvm.tencentcloudapi.com?Action=DescribeInstances&Version=2017-03-12&SignatureMethod=HmacSHA256&Timestamp=1527672334&Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02&Region=ap-guangzhou&Nonce=23823223&SecretId=AKID********EXAMPLE Host: cvm.tencentcloudapi.comContent-Type: applicationx-www-form-urlencodedHTTP POST 请求结构示例:https:cvm.tencentcloudapi.com Host: cvm.tencentcloudapi.comContent-Type: applicationx-www-form-urlencoded Action=DescribeInstances&Version=2017-03-12&SignatureMethod=HmacSHA256&Timestamp=1527672334&Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02&Region=ap-guangzhou&Nonce=23823223&SecretId=AKID********EXAMPLE地域列表本产品所有接口 Region 字段的可选值如下表所示。如果接口不支持该表中的所有地域,则会在接口文档中单独说明。 地域取值 亚太东南(曼谷)ap-bangkok 华北地区(北京)ap-beijing 西南地区(成都)ap-chengdu 西南地区(重庆)ap-chongqing 华南地区(广州)ap-guangzhou 港澳台地区(中国香港)ap-hongkong 亚太南部(孟买)ap-mumbai 亚太东北(首尔)ap-seoul 华东地区(上海)ap-shanghai 华东地区(上海金融)ap-shanghai-fsi 华南地区(深圳金融)ap-shenzhen-fsi 亚太东南(新加坡)ap-singapore 欧洲地区(法兰克福)eu-frankfurt 美国东部(弗吉尼亚)na-ashburn 美国西部(硅谷)na-siliconvalley 北美地区(多伦多)na-toronto
    来自:
  • 签名方法

    将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 "Action" ,参数值为 "DescribeInstances&quot
    来自:
  • 返回结果

    注意:目前只要请求被服务端正常处理了,响应的 HTTP 状态码均为200。例如返回的消息体里的错误码是签名失败,但 HTTP 状态码是200,而不是401。正确返回结果以云服务器的接口查看实例状态列表 (DescribeInstancesStatus) 2017-03-12 版本为例,若调用成功,其可能的返回如下为:{ "Response": { "TotalCount": 0, "InstanceStatusSet": [], "RequestId": "b5b41468-520d-4192-b42f-595cc34b6c1c" }}Response 及其内部的 RequestId 是固定的字段,无论请求成功与否,只要 API 处理了,则必定会返回。RequestId 用于一个 API 请求的唯一标识,如果 API 出现异常,可以联系我们,并提供该 ID 来解决问题。除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的 TotalCount 和 InstanceStatusSet 均为 DescribeInstancesStatus 接口定义的字段,由于调用请求的用户暂时还没有云服务器实例,因此 TotalCount 在此情况下的返回值为 0, InstanceStatusSet 列表为空。 错误返回结果若调用失败,其返回值示例如下为:{ "Response": { "Error": { "Code": "AuthFailure.SignatureFailure", "Message": "The provided credentials could not be validated. Please check your signature is correct." }, "RequestId": "ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" }}Error 的出现代表着该请求调用失败。Error 字段连同其内部的 Code 和 Message 字段在调用失败时是必定返回的。Code 表示具体出错的错误码,当请求出错时可以先根据该错误码在公共错误码和当前接口对应的错误码列表里面查找对应原因和解决方案。Message 显示出了这个错误发生的具体原因,随着业务发展或体验优化,此文本可能会经常保持变更或更新,用户不应依赖这个返回值。RequestId 用于一个 API 请求的唯一标识,如果 API 出现异常,可以联系我们,并提供该 ID 来解决问题。 公共错误码返回结果中如果存在 Error 字段,则表示调用 API 接口失败。 Error 中的 Code 字段表示错误码,所有业务都可能出现的错误码为公共错误码。完整的错误码列表请参考本产品“API 文档”目录下的“错误码”页面。
    来自:
  • 文本翻译

    错误码描述 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。 InternalError内部错误。
    来自:
  • 语种识别

    错误码描述 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。 InternalError内部错误。
    来自:
  • 语音翻译

    错误码描述 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。 InternalError内部错误。
    来自:
  • 更新历史

    第 6 次发布发布时间:2020-07-21 08:18:31本次发布包含了以下内容:改善已有的文档。修改接口: SpeechTranslate 新增入参:TransType 第 5 次发布发布时间:2019-12-30 16:14:13本次发布包含了以下内容:改善已有的文档。新增接口: TextTranslateBatch 第 4 次发布发布时间:2019-10-17 17:13:05本次发布包含了以下内容:改善已有的文档。修改接口: TextTranslate 新增入参:UntranslatedText 第 3 次发布发布时间:2019-03-14 16:08:56本次发布包含了以下内容:改善已有的文档。修改接口: SpeechTranslate 新增入参:Mode新增出参:VadSeq 第 2 次发布发布时间:2018-05-17 16:52:41本次发布包含了以下内容:改善已有的文档。新增接口: ImageTranslate 修改接口: SpeechTranslate 新增入参:ProjectId新增出参:SessionUuid, RecognizeStatus, SourceText, TargetText, Seq, Source, Target 新增数据结构: ImageRecordItemValue 第 1 次发布发布时间:2018-04-24本次发布包含了以下内容:改善已有的文档。新增接口: LanguageDetectSpeechTranslateTextTranslate
    来自:
  • 图片翻译

    错误码描述 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。 InternalError内部错误。
    来自:
  • 数据结构

    ImageRecord图片翻译结果被如下接口引用:ImageTranslate。 名称类型描述 ValueArray of ItemValue图片翻译结果 ItemValue翻译结果被如下接口引用:ImageTranslate。 名称类型描述 SourceTextString识别出的源文 TargetTextString翻译后的译文 XIntegerX坐标 YIntegerY坐标 WInteger宽度 HInteger高度
    来自:
  • 签名方法 v3

    以下文档说明了签名方法 v3 的签名过程,但仅在您编写自己的代码来调用腾讯云 API 时才有用。我们推荐您使用 腾讯云 API Explorer ,腾讯云 SDK 和 腾讯云命令行工具(TCCLI) 等开发者工具,从而无需学习如何对 API 请求进行签名。腾讯云 API 会对每个请求进行身份验证,用户需要使用安全凭证,经过特定的步骤对请求进行签名(Signature),每个请求都需要在公共参数中指定该签名结果并以指定的方式和格式发送请求。为什么要进行签名签名通过以下方式帮助保护请求: 验证请求者的身份签名确保请求是由持有有效访问密钥的人发送的。请参阅控制台 云 API 密钥 页面获取密钥相关信息。 保护传输中的数据为了防止请求在传输过程中被篡改,腾讯云 API 会使用请求参数来计算请求的哈希值,并将生成的哈希值加密后作为请求的一部分,发送到腾讯云 API 服务器。服务器会使用收到的请求参数以同样的过程计算哈希值,并验证请求中的哈希值。如果请求被篡改,将导致哈希值不一致,腾讯云 API 将拒绝本次请求。 签名方法 v3 (TC3-HMAC-SHA256)功能上覆盖了以前的签名方法 v1,而且更安全,支持更大的请求,支持 JSON 格式,POST 请求支持传空数组和空字符串,性能有一定提升,推荐使用该签名方法计算签名。首次接触,建议使用 API Explorer 中的“签名串生成”功能,选择签名版本为“API 3.0 签名 v3”,可以生成签名过程进行验证,也可直接生成 SDK 代码。推荐使用腾讯云 API 配套的 7 种常见的编程语言 SDK,已经封装了签名和请求过程,均已开源,支持 Python、Java、PHP、Go、NodeJS、.NET、C++。申请安全凭证本文使用的安全凭证为密钥,密钥包括 SecretId 和 SecretKey。每个用户最多可以拥有两对密钥。 SecretId:用于标识 API 调用者身份,可以简单类比为用户名。SecretKey:用于验证 API 调用者的身份,可以简单类比为密码。用户必须严格保管安全凭证,避免泄露,否则将危及财产安全。如已泄漏,请立刻禁用该安全凭证。 申请安全凭证的具体步骤如下: 登录 腾讯云管理中心控制台 。前往 云API密钥 的控制台页面。在 云API密钥 页面,单击【新建密钥】即可以创建一对密钥。 签名版本 v3 签名过程云 API 支持 GET 和 POST 请求。对于GET方法,只支持 Content-Type: applicationx-www-form-urlencoded 协议格式。对于POST方法,目前支持 Content-Type: applicationjson 以及 Content-Type: multipartform-data 两种协议格式,json 格式绝大多数接口均支持,multipart 格式只有特定接口支持,此时该接口不能使用 json 格式调用,参考具体业务接口文档说明。推荐使用 POST 请求,因为两者的结果并无差异,但 GET 请求只支持 32 KB 以内的请求包。下面以云服务器查询广州区实例列表作为例子,分步骤介绍签名的计算过程。我们选择该接口是因为: 云服务器默认已开通,该接口很常用;该接口是只读的,不会改变现有资源的状态;接口覆盖的参数种类较全,可以演示包含数据结构的数组如何使用。 在示例中,不论公共参数或者接口的参数,我们尽量选择容易犯错的情况。在实际调用接口时,请根据实际情况来,每个接口的参数并不相同,不要照抄这个例子的参数和值。假设用户的 SecretId 和 SecretKey 分别是:AKIDz8krbsJ5yKBZQpn74WFkmLPx3******* 和 Gu5t9xGARNpq86cd98joQYCN3*******。用户想查看广州区云服务器名为“未命名”的主机状态,只返回一条数据。则请求可能为:curl -X POST https:cvm.tencentcloudapi.com -H "Authorization: TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c" -H "Content-Type: applicationjson; charset=utf-8" -H "Host: cvm.tencentcloudapi.com" -H "X-TC-Action: DescribeInstances" -H "X-TC-Timestamp: 1551113065" -H "X-TC-Version: 2017-03-12" -H "X-TC-Region: ap-guangzhou" -d '{"Limit": 1, "Filters": , "Name": "instance-name"}]}' 下面详细解释签名计算过程。1. 拼接规范请求串按如下伪代码格式拼接规范请求串(CanonicalRequest):CanonicalRequest = HTTPRequestMethod + 'n' + CanonicalURI + 'n' + CanonicalQueryString + 'n' + CanonicalHeaders + 'n' + SignedHeaders + 'n' + HashedRequestPayload 字段名称解释 HTTPRequestMethodHTTP 请求方法(GET、POST )。此示例取值为 POST。 CanonicalURIURI 参数,API 3.0 固定为正斜杠()。 CanonicalQueryString发起 HTTP 请求 URL 中的查询字符串,对于 POST 请求,固定为空字符串"",对于 GET 请求,则为 URL 中问号(?)后面的字符串内容,例如:Limit=10&Offset=0。注意:CanonicalQueryString 需要参考 RFC3986 进行 URLEncode,字符集 UTF8,推荐使用编程语言标准库,所有特殊字符均需编码,大写形式。 CanonicalHeaders参与签名的头部信息,至少包含 host 和 content-type 两个头部,也可加入自定义的头部参与签名以提高自身请求的唯一性和安全性。拼接规则:头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:valuen 格式拼接;多个头部,按照头部 key(小写)的 ASCII 升序进行拼接。此示例计算结果是 content-type:applicationjson; charset=utf-8nhost:cvm.tencentcloudapi.comn。注意:content-type 必须和实际发送的相符合,有些编程语言网络库即使未指定也会自动添加 charset 值,如果签名时和发送时不一致,服务器会返回签名校验失败。 SignedHeaders参与签名的头部信息,说明此次请求有哪些头部参与了签名,和 CanonicalHeaders 包含的头部内容是一一对应的。content-type 和 host 为必选头部。拼接规则:头部 key 统一转成小写;多个头部 key(小写)按照 ASCII 升序进行拼接,并且以分号(;)分隔。 此示例为 content-type;host HashedRequestPayload请求正文(payload,即 body,此示例为 {"Limit": 1, "Filters": , "Name": "instance-name"}]})的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(RequestPayload))),即对 HTTP 请求正文做 SHA256 哈希,然后十六进制编码,最后编码串转换成小写字母。对于 GET 请求,RequestPayload 固定为空字符串。此示例计算结果是 35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064。 根据以上规则,示例中得到的规范请求串如下:POST content-type:applicationjson; charset=utf-8host:cvm.tencentcloudapi.com content-type;host35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f0642. 拼接待签名字符串按如下格式拼接待签名字符串:StringToSign = Algorithm + n + RequestTimestamp + n + CredentialScope + n + HashedCanonicalRequest 字段名称解释 Algorithm签名算法,目前固定为 TC3-HMAC-SHA256。 RequestTimestamp请求时间戳,即请求头部的公共参数 X-TC-Timestamp 取值,取当前时间 UNIX 时间戳,精确到秒。此示例取值为 1551113065。 CredentialScope凭证范围,格式为 Dateservicetc3_request,包含日期、所请求的服务和终止字符串(tc3_request)。Date 为 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,必须与调用的产品域名一致。此示例计算结果是 2019-02-25cvmtc3_request。 HashedCanonicalRequest前述步骤拼接所得规范请求串的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))。此示例计算结果是 5ffe6a04c0664d6b969fab9a13bdab201d63ee709638e2749d62a09ca18d7031。 注意: Date 必须从时间戳 X-TC-Timestamp 计算得到,且时区为 UTC+0。如果加入系统本地时区信息,例如东八区,将导致白天和晚上调用成功,但是凌晨时调用必定失败。假设时间戳为 1551113065,在东八区的时间是 2019-02-26 00:44:25,但是计算得到的 Date 取 UTC+0 的日期应为 2019-02-25,而不是 2019-02-26。Timestamp 必须是当前系统时间,且需确保系统时间和标准时间是同步的,如果相差超过五分钟则必定失败。如果长时间不和标准时间同步,可能导致运行一段时间后,请求必定失败,返回签名过期错误。 根据以上规则,示例中得到的待签名字符串如下:TC3-HMAC-SHA25615511130652019-02-25cvmtc3_request5ffe6a04c0664d6b969fab9a13bdab201d63ee709638e2749d62a09ca18d70313. 计算签名1)计算派生签名密钥,伪代码如下:SecretKey = "Gu5t9xGARNpq86cd98joQYCN3*******"SecretDate = HMAC_SHA256("TC3" + SecretKey, Date)SecretService = HMAC_SHA256(SecretDate, Service)SecretSigning = HMAC_SHA256(SecretService, "tc3_request")派生出的密钥 SecretDate、SecretService 和 SecretSigning 是二进制的数据,可能包含不可打印字符,此处不展示中间结果。请注意,不同的编程语言,HMAC 库函数中参数顺序可能不一样,请以实际情况为准。此处的伪代码密钥参数 key 在前,消息参数 data 在后。通常标准库函数会提供二进制格式的返回值,也可能会提供打印友好的十六进制格式的返回值,此处使用的是二进制格式。 字段名称解释 SecretKey原始的 SecretKey,即 Gu5t9xGARNpq86cd98joQYCN3*******。 Date即 Credential 中的 Date 字段信息。此示例取值为 2019-02-25。 Service即 Credential 中的 Service 字段信息。此示例取值为 cvm。 2)计算签名,伪代码如下:Signature = HexEncode(HMAC_SHA256(SecretSigning, StringToSign))此示例计算结果是 2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c。4. 拼接 Authorization按如下格式拼接 Authorization:Authorization = Algorithm + ' ' + 'Credential=' + SecretId + '' + CredentialScope + ', ' + 'SignedHeaders=' + SignedHeaders + ', ' + 'Signature=' + Signature 字段名称解释 Algorithm签名方法,固定为 TC3-HMAC-SHA256。 SecretId密钥对中的 SecretId,即 AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******。 CredentialScope见上文,凭证范围。此示例计算结果是 2019-02-25cvmtc3_request。 SignedHeaders见上文,参与签名的头部信息。此示例取值为 content-type;host。 Signature签名值。此示例计算结果是 2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c。 根据以上规则,示例中得到的值为:TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c最终完整的调用信息如下:POST https:cvm.tencentcloudapi.comAuthorization: TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652cContent-Type: applicationjson; charset=utf-8Host: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1551113065X-TC-Region: ap-guangzhou {"Limit": 1, "Filters": , "Name": "instance-name"}]}签名演示在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 SDK 中心。当前支持的编程语言有: PythonJavaPHPGoNodeJS.NETC++ 为了更清楚的解释签名过程,下面以实际编程语言为例,将上述的签名过程具体实现。请求的域名、调用的接口和参数的取值都以上述签名过程为准,代码只为解释签名过程,并不具备通用性,实际开发请尽量使用 SDK。Javaimport java.nio.charset.Charset;import java.nio.charset.StandardCharsets;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimeZone;import java.util.TreeMap;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import javax.xml.bind.DatatypeConverter; public class TencentCloudAPITC3Demo { private final static Charset UTF8 = StandardCharsets.UTF_8; private final static String SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"; private final static String SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******"; private final static String CT_JSON = "applicationjson; charset=utf-8"; public static byte key, String msg) throws Exception { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, mac.getAlgorithm()); mac.init(secretKeySpec); return mac.doFinal(msg.getBytes(UTF8)); } public static String sha256Hex(String s) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte args) throws Exception { String service = "cvm"; String host = "cvm.tencentcloudapi.com"; String region = "ap-guangzhou"; String action = "DescribeInstances"; String version = "2017-03-12"; String algorithm = "TC3-HMAC-SHA256"; String timestamp = "1551113065"; String timestamp = String.valueOf(System.currentTimeMillis() 1000); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 注意时区,否则容易出错 sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String date = sdf.format(new Date(Long.valueOf(timestamp + "000"))); ************* 步骤 1:拼接规范请求串 ************* String httpRequestMethod = "POST"; String canonicalUri = ""; String canonicalQueryString = ""; String canonicalHeaders = "content-type:applicationjson; charset=utf-8n" + "host:" + host + "n"; String signedHeaders = "content-type;host"; String payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}"; String hashedRequestPayload = sha256Hex(payload); String canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload; System.out.println(canonicalRequest); ************* 步骤 2:拼接待签名字符串 ************* String credentialScope = date + "" + service + "" + "tc3_request"; String hashedCanonicalRequest = sha256Hex(canonicalRequest); String stringToSign = algorithm + "n" + timestamp + "n" + credentialScope + "n" + hashedCanonicalRequest; System.out.println(stringToSign); ************* 步骤 3:计算签名 ************* byte secretService = hmac256(secretDate, service); byte}]} # ************* 步骤 1:拼接规范请求串 *************http_request_method = "POST"canonical_uri = ""canonical_querystring = ""ct = "applicationjson; charset=utf-8"payload = json.dumps(params)canonical_headers = "content-type:%snhost:%sn" % (ct, host)signed_headers = "content-type;host"hashed_request_payload = hashlib.sha256(payload.encode("utf-8")).hexdigest()canonical_request = (http_request_method + "n" + canonical_uri + "n" + canonical_querystring + "n" + canonical_headers + "n" + signed_headers + "n" + hashed_request_payload)print(canonical_request) # ************* 步骤 2:拼接待签名字符串 *************credential_scope = date + "" + service + "" + "tc3_request"hashed_canonical_request = hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()string_to_sign = (algorithm + "n" + str(timestamp) + "n" + credential_scope + "n" + hashed_canonical_request)print(string_to_sign) # ************* 步骤 3:计算签名 *************# 计算签名摘要函数def sign(key, msg): return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()secret_date = sign(("TC3" + secret_key).encode("utf-8"), date)secret_service = sign(secret_date, service)secret_signing = sign(secret_service, "tc3_request")signature = hmac.new(secret_signing, string_to_sign.encode("utf-8"), hashlib.sha256).hexdigest()print(signature) # ************* 步骤 4:拼接 Authorization *************authorization = (algorithm + " " + "Credential=" + secret_id + "" + credential_scope + ", " + "SignedHeaders=" + signed_headers + ", " + "Signature=" + signature)print(authorization) print('curl -X POST ' + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + host + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + str(timestamp) + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'")Golangpackage main import ( "cryptohmac" "cryptosha256" "encodinghex" "fmt" "time") func sha256hex(s string) string { b := sha256.Sum256()} func hmacsha256(s, key string) string { hashed := hmac.New(sha256.New, byte(s)) return string(hashed.Sum(nil))} func main() { secretId := "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" secretKey := "Gu5t9xGARNpq86cd98joQYCN3*******" host := "cvm.tencentcloudapi.com" algorithm := "TC3-HMAC-SHA256" service := "cvm" version := "2017-03-12" action := "DescribeInstances" region := "ap-guangzhou" var timestamp int64 = time.Now().Unix() var timestamp int64 = 1551113065 step 1: build canonical request string httpRequestMethod := "POST" canonicalURI := "" canonicalQueryString := "" canonicalHeaders := "content-type:applicationjson; charset=utf-8n" + "host:" + host + "n" signedHeaders := "content-type;host" payload := `{"Limit": 1, "Filters": , "Name": "instance-name"}]}` hashedRequestPayload := sha256hex(payload) canonicalRequest := fmt.Sprintf("%sn%sn%sn%sn%sn%s", httpRequestMethod, canonicalURI, canonicalQueryString, canonicalHeaders, signedHeaders, hashedRequestPayload) fmt.Println(canonicalRequest) step 2: build string to sign date := time.Unix(timestamp, 0).UTC().Format("2006-01-02") credentialScope := fmt.Sprintf("%s%stc3_request", date, service) hashedCanonicalRequest := sha256hex(canonicalRequest) string2sign := fmt.Sprintf("%sn%dn%sn%s", algorithm, timestamp, credentialScope, hashedCanonicalRequest) fmt.Println(string2sign) step 3: sign string secretDate := hmacsha256(date, "TC3"+secretKey) secretService := hmacsha256(service, secretDate) secretSigning := hmacsha256("tc3_request", secretService) signature := hex.EncodeToString(, "Name": "instance-name"}]}';$hashedRequestPayload = hash("SHA256", $payload);$canonicalRequest = $httpRequestMethod."n" .$canonicalUri."n" .$canonicalQueryString."n" .$canonicalHeaders."n" .$signedHeaders."n" .$hashedRequestPayload;echo $canonicalRequest.PHP_EOL; step 2: build string to sign$date = gmdate("Y-m-d", $timestamp);$credentialScope = $date."".$service."tc3_request";$hashedCanonicalRequest = hash("SHA256", $canonicalRequest);$stringToSign = $algorithm."n" .$timestamp."n" .$credentialScope."n" .$hashedCanonicalRequest;echo $stringToSign.PHP_EOL; step 3: sign string$secretDate = hash_hmac("SHA256", $date, "TC3".$secretKey, true);$secretService = hash_hmac("SHA256", $service, $secretDate, true);$secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);$signature = hash_hmac("SHA256", $stringToSign, $secretSigning);echo $signature.PHP_EOL; step 4: build authorization$authorization = $algorithm ." Credential=".$secretId."".$credentialScope .", SignedHeaders=content-type;host, Signature=".$signature;echo $authorization.PHP_EOL; $curl = "curl -X POST https:".$host .' -H "Authorization: '.$authorization.'"' .' -H "Content-Type: applicationjson; charset=utf-8"' .' -H "Host: '.$host.'"' .' -H "X-TC-Action: '.$action.'"' .' -H "X-TC-Timestamp: '.$timestamp.'"' .' -H "X-TC-Version: '.$version.'"' .' -H "X-TC-Region: '.$region.'"' ." -d '".$payload."'";echo $curl.PHP_EOL;Ruby# -*- coding: UTF-8 -*-# require ruby>=2.3.0require 'digest'require 'json'require 'time'require 'openssl' # 密钥参数secret_id = 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******'secret_key = 'Gu5t9xGARNpq86cd98joQYCN3*******' service = 'cvm'host = 'cvm.tencentcloudapi.com'endpoint = 'https:' + hostregion = 'ap-guangzhou'action = 'DescribeInstances'version = '2017-03-12'algorithm = 'TC3-HMAC-SHA256'# timestamp = Time.now.to_itimestamp = 1551113065date = Time.at(timestamp).utc.strftime('%Y-%m-%d') # ************* 步骤 1:拼接规范请求串 *************http_request_method = 'POST'canonical_uri = ''canonical_querystring = ''canonical_headers = "content-type:applicationjson; charset=utf-8nhost:#{host}n"signed_headers = 'content-type;host'# params = { 'Limit' => 1, 'Filters' => }] }# payload = JSON.generate(params, { 'ascii_only' => true, 'space' => ' ' })# json will generate in random order, to get specified result in example, we hard-code it here.payload = '{"Limit": 1, "Filters": , "Name": "instance-name"}]}'hashed_request_payload = Digest::SHA256.hexdigest(payload)canonical_request = .join("n") puts canonical_request # ************* 步骤 2:拼接待签名字符串 *************credential_scope = date + '' + service + '' + 'tc3_request'hashed_request_payload = Digest::SHA256.hexdigest(canonical_request)string_to_sign = .join("n")puts string_to_sign # ************* 步骤 3:计算签名 *************digest = OpenSSL::Digest.new('sha256')secret_date = OpenSSL::HMAC.digest(digest, 'TC3' + secret_key, date)secret_service = OpenSSL::HMAC.digest(digest, secret_date, service)secret_signing = OpenSSL::HMAC.digest(digest, secret_service, 'tc3_request')signature = OpenSSL::HMAC.hexdigest(digest, secret_signing, string_to_sign)puts signature # ************* 步骤 4:拼接 Authorization *************authorization = "#{algorithm} Credential=#{secret_id}#{credential_scope}, SignedHeaders=#{signed_headers}, Signature=#{signature}"puts authorization puts 'curl -X POST ' + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + host + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + timestamp.to_s + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'"DotNetusing System;using System.Collections.Generic;using System.Security.Cryptography;using System.Text; public class Application{ public static string SHA256Hex(string s) { using (SHA256 algo = SHA256.Create()) { byte.ToString("x2")); } return builder.ToString(); } } public static byte key, byte tc3SecretKey = Encoding.UTF8.GetBytes("TC3" + secretkey); byte secretService = HmacSHA256(secretDate, Encoding.UTF8.GetBytes(service)); byte signatureBytes = HmacSHA256(secretSigning, Encoding.UTF8.GetBytes(stringToSign)); string signature = BitConverter.ToString(signatureBytes).Replace("-", "").ToLower(); Console.WriteLine(signature); ************* 步骤 4:拼接 Authorization ************* string authorization = algorithm + " " + "Credential=" + secretid + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature; Console.WriteLine(authorization); Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add("Authorization", authorization); headers.Add("Host", endpoint); headers.Add("Content-Type", contentType + "; charset=utf-8"); headers.Add("X-TC-Timestamp", requestTimestamp.ToString()); headers.Add("X-TC-Version", version); headers.Add("X-TC-Action", action); headers.Add("X-TC-Region", region); return headers; } public static void Main(string, "Name": "instance-name"}]}"; Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service , endpoint, region, action, version, date, requestPayload); Console.WriteLine("POST https:cvm.tencentcloudapi.com"); foreach (KeyValuePair<string, string> kv in headers) { Console.WriteLine(kv.Key + ": " + kv.Value); } Console.WriteLine(); Console.WriteLine(requestPayload); }} NodeJSconst crypto = require('crypto'); function sha256(message, secret = '', encoding) { const hmac = crypto.createHmac('sha256', secret) return hmac.update(message).digest(encoding)} function getHash(message, encoding = 'hex') { const hash = crypto.createHash('sha256') return hash.update(message).digest(encoding)} function getDate(timestamp) { const date = new Date(timestamp * 1000) const year = date.getUTCFullYear() const month = ('0' + (date.getUTCMonth() + 1)).slice(-2) const day = ('0' + date.getUTCDate()).slice(-2) return `${year}-${month}-${day}`} function main(){ 密钥参数 const SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" const SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******" const endpoint = "cvm.tencentcloudapi.com" const service = "cvm" const region = "ap-guangzhou" const action = "DescribeInstances" const version = "2017-03-12" const timestamp = getTime() const timestamp = 1551113065 时间处理, 获取世界时间日期 const date = getDate(timestamp) ************* 步骤 1:拼接规范请求串 ************* const signedHeaders = "content-type;host" const payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}" const hashedRequestPayload = getHash(payload); const httpRequestMethod = "POST" const canonicalUri = "" const canonicalQueryString = "" const canonicalHeaders = "content-type:applicationjson; charset=utf-8n" + "host:" + endpoint + "n" const canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload console.log(canonicalRequest) ************* 步骤 2:拼接待签名字符串 ************* const algorithm = "TC3-HMAC-SHA256" const hashedCanonicalRequest = getHash(canonicalRequest); const credentialScope = date + "" + service + "" + "tc3_request" const stringToSign = algorithm + "n" + timestamp + "n" + credentialScope + "n" + hashedCanonicalRequest console.log(stringToSign) ************* 步骤 3:计算签名 ************* const kDate = sha256(date, 'TC3' + SECRET_KEY) const kService = sha256(service, kDate) const kSigning = sha256('tc3_request', kService) const signature = sha256(stringToSign, kSigning, 'hex') console.log(signature) ************* 步骤 4:拼接 Authorization ************* const authorization = algorithm + " " + "Credential=" + SECRET_ID + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature console.log(authorization) const curlcmd = 'curl -X POST ' + "https:" + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + endpoint + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + timestamp.toString() + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'" console.log(curlcmd)}main()C++#include <iostream>#include <iomanip>#include <sstream>#include <string>#include <stdio.h>#include <time.h>#include <opensslsha.h>#include <opensslhmac.h> using namespace std; string get_data(int64_t &timestamp){ string utcDate; char buff = {0}; time_t timenow; struct tm sttime; sttime = *gmtime(&timestamp); strftime(buff, sizeof(buff), "%Y-%m-%d", &sttime); utcDate = string(buff); return utcDate;} string int2str(int64_t n){ std::stringstream ss; ss << n; return ss.str();} string sha256Hex(const string &str){ char buf; unsigned char hash; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, str.c_str(), str.size()); SHA256_Final(hash, &sha256); std::string NewString = ""; for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) { snprintf(buf, sizeof(buf), "%02x", hash); NewString = NewString + buf; } return NewString;} string HmacSha256(const string &key, const string &input){ unsigned char hash; HMAC_CTX *h;#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX hmac; HMAC_CTX_init(&hmac); h = &hmac;#else h = HMAC_CTX_new();#endif HMAC_Init_ex(h, &key, key.length(), EVP_sha256(), NULL); HMAC_Update(h, ( unsigned char* )&input, input.length()); unsigned int len = 32; HMAC_Final(h, hash, &len); #if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX_cleanup(h);#else HMAC_CTX_free(h);#endif std::stringstream ss; ss << std::setfill('0'); for (int i = 0; i < len; i++) { ss << hash; } return (ss.str());} string HexEncode(const string &input){ static const char* const lut = "0123456789abcdef"; size_t len = input.length(); string output; output.reserve(2 * len); for (size_t i = 0; i < len; ++i) { const unsigned char c = input; output.push_back(lut); output.push_back(lut); } return output;} int main(){ 密钥参数 string SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"; string SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******"; string service = "cvm"; string host = "cvm.tencentcloudapi.com"; string region = "ap-guangzhou"; string action = "DescribeInstances"; string version = "2017-03-12"; int64_t timestamp = 1551113065; string date = get_data(timestamp); ************* 步骤 1:拼接规范请求串 ************* string httpRequestMethod = "POST"; string canonicalUri = ""; string canonicalQueryString = ""; string canonicalHeaders = "content-type:applicationjson; charset=utf-8nhost:" + host + "n"; string signedHeaders = "content-type;host"; string payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}"; string hashedRequestPayload = sha256Hex(payload); string canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload; cout << canonicalRequest << endl; ************* 步骤 2:拼接待签名字符串 ************* string algorithm = "TC3-HMAC-SHA256"; string RequestTimestamp = int2str(timestamp); string credentialScope = date + "" + service + "" + "tc3_request"; string hashedCanonicalRequest = sha256Hex(canonicalRequest); string stringToSign = algorithm + "n" + RequestTimestamp + "n" + credentialScope + "n" + hashedCanonicalRequest; cout << stringToSign << endl; ************* 步骤 3:计算签名 *************** string kKey = "TC3" + SECRET_KEY; string kDate = HmacSha256(kKey, date); string kService = HmacSha256(kDate, service); string kSigning = HmacSha256(kService, "tc3_request"); string signature = HexEncode(HmacSha256(kSigning, stringToSign)); cout << signature << endl; ************* 步骤 4:拼接 Authorization ************* string authorization = algorithm + " " + "Credential=" + SECRET_ID + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature; cout << authorization << endl; string curlcmd = "curl -X POST https:" + host + "n" + " -H "Authorization: " + authorization + "n" + " -H "Content-Type: applicationjson; charset=utf-8"" + "n" + " -H "Host: " + host + "n" + " -H "X-TC-Action: " + action + "n" + " -H "X-TC-Timestamp: " + RequestTimestamp + "n" + " -H "X-TC-Version: " + version + "n" + " -H "X-TC-Region: " + region + "n" + " -d '" + payload; cout << curlcmd << endl; return 0;};签名失败存在以下签名失败的错误码,请根据实际情况处理。 错误码错误描述 AuthFailure.SignatureExpire签名过期。Timestamp 与服务器接收到请求的时间相差不得超过五分钟。 AuthFailure.SecretIdNotFound密钥不存在。请到控制台查看密钥是否被禁用,是否少复制了字符或者多了字符。 AuthFailure.SignatureFailure签名错误。可能是签名计算错误,或者签名与实际发送的内容不相符合,也有可能是密钥 SecretKey 错误导致的。 AuthFailure.TokenFailure临时证书 Token 错误。 AuthFailure.InvalidSecretId密钥非法(不是云 API 密钥类型)。
    来自:
  • 错误码

    业务错误码 错误码说明 FailedOperation.NoFreeAmount本月免费额度已用完,如需继续使用您可以在机器翻译控制台升级为付费使用。FailedOperation.UserNotRegistered服务未开通,请在腾讯云官网机器翻译控制台开通服务。
    来自:

扫码关注云+社区

领取腾讯云代金券