想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。

之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。
可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多,没有那么多模棱两可的参数,也可能是我的错觉。当前现在腾讯云有了各种语言的代码示例,直接抄即可。

https://cloud.tencent.com/document/api/551/30636

踩过的坑

  1. 在写header的时候,将Action等头部名直接写入,实际上,需要在前面加上 “X-TC-”
  2. 根据文档步骤1 拼接规范请求串 时,漏掉空行
POST
/content-type:application/json; charset=utf-8
host:cvm.tencentcloudapi.com
x-tc-action:describeinstancescontent-type;host;x-tc-action
35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064

上面代码中有两个空行,不可忽略。
3. 步骤2中,获取当前日期,需要 与UTC 标准时间日期一致。
4. 步骤3中,计算签名 文档示例与作者使用语言(PHP)的加密函数不同,把data和key颠倒了。

代码

	function sign($data , $headers){$this->date = gmdate("Y-m-d" , TIMESTAMP);if(is_array($data)){$data = json_encode($data);}$canonicalHeaders = '';$signedHeaders = '';foreach ($headers as $k => $v){$canonicalHeaders .= $k . ":" . $v . "\n";$signedHeaders .= $k . ";";}$canonicalHeaders = strtolower($canonicalHeaders);$signedHeaders = strtolower(rtrim($signedHeaders , ";"));$hashedRequestPayload = hash("SHA256" , $data);// 1$canonicalRequest = "POST\n" .      //请求方法"/\n" .                         //URI 参数,API 3.0 固定为正斜杠(/)"\n" .                          //URL 中的查询字符串"$canonicalHeaders\n" .         //参与签名的头部信息"$signedHeaders\n" .            //哪些头部参与了签名"$hashedRequestPayload";;       // 请求正文做 SHA256 哈希echo $canonicalRequest;echo "<hr>";$hashCanonicalRequest = strtolower(bin2hex(hash('sha256' , $canonicalRequest , true)));// 2$CredentialScope = "{$this->date}/tmt/tc3_request";$secretSigning = ['TC3-HMAC-SHA256' ,	//签名算法$this->time ,		//请求时间戳$CredentialScope ,	//凭证范围,格式为 Date/service/tc3_request$hashCanonicalRequest ,	//步骤1拼接所得的字符串];$secretSigning = implode("\n" , $secretSigning);echo $secretSigning;echo "<hr>";//3 计算签名$secretDate = hash_hmac('sha256' , $this->date , "TC3$this->SecretKey" , true);$SecretService = hash_hmac('sha256' , "tmt" , $secretDate , true);$SecretSigning = hash_hmac('sha256' , "tc3_request" , $SecretService , true);$Signature = bin2hex(hash_hmac('sha256' , $secretSigning , $SecretSigning , true)); // 返回十六进制字符串echo $Signature;echo "<hr>";//4 拼接 Authorization$Authorization = "TC3-HMAC-SHA256 "."Credential={$this->SecretId}/$CredentialScope, "."SignedHeaders=$signedHeaders, "."Signature=$Signature";echo $Authorization . PHP_EOL;echo "<hr>";return $Authorization;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/82660.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/82660.shtml
英文地址,请注明出处:http://en.pswp.cn/web/82660.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32中自动生成Flash地址的方法

每页大小为 2KB(0x800 字节),地址间隔为 0x800 总地址空间覆盖范围:0x08000000 ~ 0x0803F800(共 256KB) 适用于 STM32 大容量 / 中容量产品(如 F103 系列) 代码如下 // 通用定义(需根据实际页大小调整) #define FLASH_BASE_ADDR 0x08000000 #define FLASH_PAGE_SIZ…

(12)java+ selenium->元素定位大法之By_link_text

1.简介 本章节介绍元素定位中的link_text,顾名思义是通过链接定位的(官方说法:超链接文本定位)。什么是link_text呢,就是我们在任何一个网页上都可以看到有一个或者多个链接,上面有一个文字描述,点击这个文字,就可以跳转到其他页面。这个就是link_Text。 注意:link_t…

Tomcat 线程模型详解性能调优

1. Tomcat I/O模型详解**&#xff08;了解&#xff09;** 1.1 Linux I/O模型详解 I/O要解决什么问题 I/O&#xff1a;在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令&#xff0c;数据从外部设备拷贝至内存需要一段时间&#xff0c;这段时间CPU就…

C++课设:智能优惠快餐点餐系统

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《编程项目实战》 目录 一、项目介绍与亮点功能1. 项目背景2.完…

PHP的namespace

文章目录 环境Java的packagepackage关键字包结构和目录结构访问权限import关键字总结 PHP的namespacenamespace关键字在同一个文件里使用资源限定&#xff0c;完全限定&#xff0c;非限定限定完全限定非限定 use关键字use VS 直接指定资源在不同的文件里使用总结 环境 Windows…

矩阵分解相关知识点总结(二)

文章目录 三、矩阵的QR分解3.1、Givens矩阵与Givens变换3.2、Householder矩阵与Householder变换3.3、QR分解 书接上文矩阵分解相关知识点总结&#xff08;一&#xff09; 三、矩阵的QR分解 3.1、Givens矩阵与Givens变换 设非零列向量 x ∈ R n \bm{x}\in {\bf{R}}^n x∈Rn及单…

Chorme如何对于youtube视频进行画中画背景播放?

画中画可以让你小窗播放&#xff0c;然后浏览器放后台还可以做点别的事情。 B站直接可以选择小窗播放&#xff0c;游览器最小化就可以&#xff0c;但是youtube的小窗播放游览器一切换就不显示了。 其实是因为youtube的小窗播放不是真的小窗播放。要想真的实现需要在youtube视…

14.AI搭建preparationのBERT预训练模型进行文本分类

一、回顾&#xff1a; 对深度学习框架Python2.0进行自然语言处理有了一个基础性的认识注意力模型编码器(encoder_layer,用于分类的全连接层dense_layer)&#xff0c;抛弃了传统的循环神经网络和卷积神经网络&#xff0c;通过注意力模型将任意位置的两个单词的距离转换成1编码器…

OD 算法题 B卷【最长公共前缀】

文章目录 最长公共前缀 最长公共前缀 编写一个函数来查找字符串数组 中的最长公共前缀&#xff0c;如果不存在公共前缀&#xff0c;返回字符串’Zero’字符串长度范围【2,1000】&#xff0c;字符串中字符长度范围为【1,126】 示例1 输入&#xff1a; [“flower”, “flow”, …

pycharm F2 修改文件名 修改快捷键

菜单&#xff1a;File-> Setting&#xff0c; Keymap中搜索 Rename&#xff0c; 其中&#xff0c;有 Refactor-> Rename&#xff0c;右键添加快捷键&#xff0c;F2&#xff0c;删除原有快捷键就可以了。

WEB安全--SQL注入--bypass技巧2

继之前文章的补充&#xff1a; WEB安全--SQL注入--bypass技巧_sql注入过滤空格-CSDN博客 Q1&#xff1a;发现sql注入的时间盲注时&#xff0c;如果时间盲注的函数都被过滤了&#xff0c;怎么办&#xff1f; 除了找其他函数替换、编码等方式&#xff0c;还有以下方式绕过&…

自定义事件wpf

// 自定义控件 public class MyCustomControl : Control { public static readonly RoutedEvent MyCustomEvent EventManager.RegisterRoutedEvent( "MyCustom", RoutingStrategy.Bubbling, typeof(RoutedEventHandler), typeof(MyCustomControl) ); public event R…

【汇编逆向系列】一、无参数的函数调用- RSP,EAX寄存器,全局变量,INT类型和MOV,INC,SHL指令

给出一段简单的汇编 no_params_function:0000000000000000: 40 57 push rdi0000000000000002: 8B 05 00 00 00 00 mov eax,dword ptr [global_counter]0000000000000008: FF C0 inc eax000000000000000A: 89 05 00 00 00 0…

知识蒸馏:从模型输出到深层理解

1. 概念阐释: 还记得上次说的“老师教你画画,不只教‘猫’,还教‘像狗像树叶’的细微感觉”吗?那是最初的蒸馏。 后来大家发现,老师不仅仅通过“最后画出来像什么”来教你。 有时候,老师是教你“他画画时,哪里用了力气,哪里画得特别认真”(这叫基于特征的蒸馏,学习…

vue-18(使用 Vuex 插件实现高级功能)

使用 Vuex 插件实现高级功能 Vuex 插件提供了一种强大的方式来扩展 Vuex 存储的功能。它们为存储的变更过程提供了钩子&#xff0c;允许你拦截变更、执行副作用以及添加自定义逻辑。本章将探讨如何利用 Vuex 插件实现持久化、日志记录和时间旅行调试等高级功能。我们将深入研究…

【Java】CopyOnWriteArrayList

一&#xff0c;概述 CopyOnWriteArrayList作为List接口的实现之一&#xff0c;它区分于ArrayList在于它是线程安全的。如它名字一样&#xff0c;所有的写操作均复制了原数组的值&#xff0c;虽说代价较大&#xff0c;但读多写少的环境下&#xff0c;是可接受的。笔者在此简单看…

【高等数学】函数项级数

目录 函数项级数收敛域的定义收敛域的判定方法常见幂级数展开&#xff08;麦克劳林级数&#xff09;幂级数的应用 傅里叶级数傅里叶级数的基本概念傅里叶级数的主要性质奇偶函数的简化周期延拓奇延拓偶延拓 函数项级数 函数项级数是指由一系列函数构成的无穷级数&#xff0c;形…

基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置

文章目录 前言一、L标记、R标记二、修改工具样式1. 样式的四种级别2. 导入annotation3. 示例1 - 修改toolGroup中的样式4. 示例2 - 修改viewport中的样式 三、可配置样式 前言 cornerstone3D 中的文字标记工具LabelTool&#xff0c;在添加文字标记时会弹出对话框让用户输入文字…

PPT转图片拼贴工具 v4.3

软件介绍 这个软件就是将PPT文件转换为图片并且拼接起来。 效果展示 支持导入文件和支持导入文件夹&#xff0c;也支持手动输入文件/文件夹路径 软件界面 这一次提供了源码和开箱即用版本&#xff0c;exe就是直接用就可以了。 软件源码 import os import re import sys …

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…