导语:我们来搭建开发环境调用消息队列 CKafka--手动拼接和自动拼接请求URL,来调用获取消费分组offset的接口
一、 接口描述
接口请求域名:ckafka.api.zijiebao.com
本接口(GetGroupOffsets)用于在用户账户下获取 CKafka 消息分组 offset。
二、输入参数
以下请求参数列表仅列出了接口请求参数,其它参数见 公共请求参数 页面。
参数名称 | 是否必选 | 类型 | 描述 |
---|---|---|---|
instanceId | 是 | String | (过滤条件)按照实例 ID 过滤 |
group | 是 | String | Kafka 消费分组 |
topics | 否 | String Array | group 订阅的主题名称数组,如果没有该数组,则表示指定的 group 下所有 topic 信息 |
searchWord | 否 | String | 模糊匹配 topicName |
offset | 否 | Int | 本次查询的偏移位置,默认为0 |
limit | 否 | Int | 本次返回结果的最大个数,默认为50,最大值为50 |
注:下面签名只用了instanceId和group参数
三、公共请求参数
参数名称 | 描述 | 类型 | 必选 |
---|---|---|---|
Action | 具体操作的指令接口名称,例如腾讯云 CVM 用户调用 查询实例列表接口,则 Action 参数即为 DescribeInstances。 | String | 是 |
Region | 地域参数,用来标识希望操作哪个地域的实例。详细信息可参见 地域和可用区 列表,或使用 查询地域列表 API 接口查看。 注意:1. 正常情况下此参数是必须的,如无需传入,则会在相应接口中进行说明。 2. 部分区域正在内测中,目前仅面向部分用户开放。 | String | 否 |
Timestamp | 当前 UNIX 时间戳,可记录发起 API 请求的时间。 | UInt | 是 |
Nonce | 用户可自定义随机正整数,与 Timestamp 联合起来, 用于防止重放攻击。 | UInt | 是 |
SecretId | 在 云API密钥 上申请的标识身份的 SecretId,一个 SecretId 对应唯一的 SecretKey , 而 SecretKey 会用来生成请求签名 Signature。具体可参考 签名方法 章节。 | String | 是 |
Signature | 请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。计算方法可参考 签名方法 章节。 | String | 是 |
SignatureMethod | 签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。详细签名计算方法可参考 签名方法 章节。 | String | 否 |
Token | 临时证书所用的 Token,需要结合临时密钥一起使用。长期密钥不需要 Token。 | String | 否 |
注:下面签名只有Token没用,Signature是最后加到请求url。
四、调用方式
腾讯云 API 会对每个访问的请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature),以验证用户身份。签名信息由用户所执有的安全凭证生成,安全凭证包括 SecretId 和 SecretKey,若用户还没有安全凭证,则需要在腾讯云官网上自主申请,否则无法调用云 API 接口。
签名方法
1、准备工作
SecretId:AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx
SecretKey:WmmW0wd4E8nCKEPM3Zpqb7PUKvHxxxxx
获取当前时间戳
https://tool.lu/timestamp
2、对参数排序
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z)
"Action":"GetGroupOffsets"
"Nonce":"1567669377"
"Region":"ap-guangzhou"
"SecretId":"AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx"
"SignatureMethod":"HmacSHA256"
"Timestamp":"1567669377"
"group":"console-consumer-2529"
"instanceId":"ckafka-3vekvxxx"
3、拼接请求字符串
Action=GetGroupOffsets
&Nonce=1567669377
&Region=ap-guangzhou
&SecretId=AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx
&SignatureMethod=HmacSHA256
&Timestamp=1567669377
&group=console-consumer-2529
&instanceId=ckafka-3vekvxxx
4、拼接签名原文字符串(GET或POST)
GETckafka.api.zijiebao.com/v2/index.php?Action=GetGroupOffsets&Nonce=1567671719&Region=ap-guangzhou&SecretId=AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx&SignatureMethod=HmacSHA256&Timestamp=1567671719&group=console-consumer-2529&instanceId=ckafka-3vekvxxx
5、生成签名串
$secretKey = 'WmmW0wd4E8nCKEPM3Zpqb7xxxxxxxxxxx';
$srcStr = 'GETckafka.api.zijiebao.com/v2/index.php?Action=GetGroupOffsets&Nonce=1567673666&Region=ap-guangzhou&SecretId=AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx&SignatureMethod=HmacSHA256&Timestamp=1567673666&group=console-consumer-2529&instanceId=ckafka-3vekvxxx';
$signStr = base64_encode(hash_hmac('sha256', $srcStr, $secretKey, true));
echo $signStr;
签名串:
t/NnKgbvxXpZuXeRXeKZPBhVVbustIqHuLj7jvxxxxx=
6、URL编码
7、签名串请求参数
t/NnKgbvxXpZuXeRXeKZPBhVVbustIqHuLj7jvxxxxx=
8、拼接请求url并执行
curl "https://ckafka.api.zijiebao.com/v2/index.php?Action=GetGroupOffsets&Nonce=1567673666&Region=ap-guangzhou&SecretId=AKIDKTM0OYJ6SaaKnyqZx5wYx61hANJxxxxx&SignatureMethod=HmacSHA256&Timestamp=1567673666&group=console-consumer-2529&instanceId=ckafka-3vekvxxx&Signature=t/NnKgbvxXpZuXeRXeKZPBhVVbustIqHuLj7jvxxxxx="
五. 自动生成请求url
POST:
GET:
六、 接口调用返回的错误码
https://cloud.tencent.com/document/product/597/10090
七、调用Ckafka接口用到的SDK
https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java/3.0.58
八 、 调用URL
代码语言:javascript复制
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class ToInterface {
public static void main(String[] args) {
String str =sendGet("https://ckafka.api.zijiebao.com/v2/index.php", "Action=GetGroupOffsets&Nonce=1567680660&Region=ap-guangzhou&SecretId=AKIDKTM0OYJ6SaaKnyqZx5wYx61hxxxxxXP2&SignatureMethod=HmacSHA256&Timestamp=1567680660&group=console-consumer-2529&instanceId=ckafka-3vekvxxx&Signature=+dyj+/UoG58HJwHyhzoZGcbjwQiScJhLqxxxxxx96jo=");
System.out.println(str);
}
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url "?" param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key "--->" map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result = line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
}
执行结果:
代码语言:javascript复制Transfer-Encoding--->[chunked]
null--->[HTTP/1.1 200 OK]
Server--->[nginx]
Connection--->[close]
Vary--->[Accept-Encoding]
Date--->[Thu, 05 Sep 2019 12:25:58 GMT]
Content-Type--->[text/html; charset=utf-8]
{"code":0,"message":"","codeDesc":"Success","data":{"totalCount":1,"topicList":[{"topic":"topic_test1","partitions":[{"partition":0,"offset":349344,"meta":null,"errCode":0,"logEndOffset":349415,"lag":71}]}]}}