阿里云API公共参数的获取
API写的和屎一样,不多说,
只需要accessKeyId和accessKeySecret,标红的需要你提供,用我的代码可以直接获取公共参数
以获取视频列表为例 视频列表API https://help.aliyun.com/document_detail/52838.html?spm=a2c4g.11186623.6.638.47JAZk
API中必传公共参数:
代码如下:
package com.xgt.util; import sun.misc.BASE64Encoder; import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.SignatureException;
import java.text.SimpleDateFormat;
import java.util.*; public class AliyunPublicParamsUtil { static String accessKeyId = "WGIX72GCzaesHTSO";
public static void main(String[] args) throws IOException {
/**
*获取视频列表的公共参数
*/
Map<String,String> publicParams = new HashMap<>();
publicParams.put("Version","2017-03-21");
publicParams.put("SignatureMethod","HMAC-SHA1");
publicParams.put("Timestamp",generateTimestamp());
publicParams.put("SignatureVersion","1.0");
publicParams.put("SignatureNonce",generateRandom());
publicParams.put("Action","GetVideoList");
publicParams.put("Format","JSON"); Map<String,String> privateParams = new HashMap<>();
privateParams.put("AccessKeyId","AccessKeyId"); List<String> stringList = getAllParams(publicParams,privateParams);
String CanonicalizedQueryString = getCQS(stringList); String httpMethod = "GET";
String StringToSign = httpMethod + "&" + percentEncode("/") + "&" + percentEncode(CanonicalizedQueryString);
byte[] HMAC = hmacSHA1Signature("accessKeySecret",StringToSign);
String signature = newStringByBase64(HMAC); String GetVideoPlayAuthUrl = "http://vod.cn-shanghai.aliyuncs.com/?Timestamp="+publicParams1.get("Timestamp")+"&AccessKeyId="+accessKeyId+"&Action=GetVideoPlayAuth&VideoId=362be314b7ad4cd29d31badcdd993335" +
"&SignatureVersion=1.0&SignatureNonce="+publicParams1.get("SignatureNonce")+"&SignatureMethod=HMAC-SHA1&Format=JSON" +
"&Version=2017-03-21&Signature="+signature;
System.out.println(GetVideoPlayAuthUrl);
}
/*对所有参数名称和参数值做URL编码*/
public static List<String> getAllParams(Map<String, String> publicParams, Map<String, String> privateParams) throws UnsupportedEncodingException {
List<String> encodeParams = new ArrayList<String>();
if (publicParams != null) {
for (String key : publicParams.keySet()) {
String value = publicParams.get(key);
//将参数和值都urlEncode一下。
String encodeKey = percentEncode(key);
String encodeVal = percentEncode(value);
encodeParams.add(encodeKey + "=" + encodeVal);
}
}
if (privateParams != null) {
for (String key : privateParams.keySet()) {
String value = privateParams.get(key);
//将参数和值都urlEncode一下。
String encodeKey = percentEncode(key);
String encodeVal = percentEncode(value);
encodeParams.add(encodeKey + "=" + encodeVal);
}
}
return encodeParams;
}
/*获取 CanonicalizedQueryString*/
public static String getCQS(List<String> allParams) {
ParamsComparator paramsComparator = new ParamsComparator();
Collections.sort(allParams, paramsComparator);
String cqString = "";
for (int i = 0; i < allParams.size(); i++) {
cqString += allParams.get(i);
if (i != allParams.size() - 1) {
cqString += "&";
}
}
return cqString;
}
/*字符串参数比较器*/
public static class ParamsComparator implements Comparator<String> {
@Override
public int compare(String lhs, String rhs) {
return lhs.compareTo(rhs);
}
} /*特殊字符替换为转义字符*/
public static String percentEncode(String value) {
try {
String urlEncodeOrignStr = URLEncoder.encode(value, "UTF-8");
String plusReplaced = urlEncodeOrignStr.replace("+", "%20");
String starReplaced = plusReplaced.replace("*", "%2A");
String waveReplaced = starReplaced.replace("%7E", "~");
return waveReplaced;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value;
} public static byte[] hmacSHA1Signature(String accessKeySecret, String stringToSign) {
try {
String key = accessKeySecret + "&";
try {
SecretKeySpec signKey = new SecretKeySpec(key.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signKey);
return mac.doFinal(stringToSign.getBytes());
} catch (Exception e) {
throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
}
} catch (SignatureException e) {
e.printStackTrace();
}
return null;
} public static String newStringByBase64(byte[] bytes)
throws UnsupportedEncodingException {
if (bytes == null || bytes.length == 0) {
return null;
}
return new String(new BASE64Encoder().encode(bytes));
} /*生成当前UTC时间戳Time*/
public static String generateTimestamp() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
df.setTimeZone(new SimpleTimeZone(0, "GMT"));
return df.format(date);
} public static String generateRandom() {
String signatureNonce = UUID.randomUUID().toString();
return signatureNonce;
}
}
阿里云API公共参数的获取的更多相关文章
- 【阿里云API】 阿里云API调用的若干说明
阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...
- 阿里云API网关(9)常见问题
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云 API 签名机制的 Python 实现
在调用阿里云 API 的时候,最让人头疼的就是 API 的签名(Signature)机制,阿里云在通用文档中也有专项说明,但是仅仅有基于 Java 的实现代码示例.所以这里基于 Python 来分析下 ...
- Python 调用阿里云 API 收集 ECS 数据
#!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2. ...
- 利用用阿里云API实现DDNS
前言 之前动态域名解析是用的是腾达路由器上集成的第三方动态解析服务花生壳,解析费用一年40元.后来觉得域名前缀不好,想换掉,花生壳需要重新购买新的域名解析费用,增加1条或者2条动态解析无所谓,万一以后 ...
- 阿里云API网关(11)外网访问 阿里云API网关内定义的API步骤:
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- 阿里云api调用做简单的cmdb
阿里云api调用做简单的cmdb 1 步骤 事实上就是调用阿里api.获取可用区,比方cn-hangzhou啊等等.然后在每一个区调用api 取ecs的状态信息,最好写到一个excel里面去.方便排序 ...
- 阿里云API网关!
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等阿里云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需 ...
- 浅析阿里云API网关的产品架构和常见应用场景
自上世纪60年代计算机网络发展开始,API(Application Programming Interface )随之诞生,API即应用程序接口,是实现系统间衔接的桥梁.时至今日,API市场已经形成了 ...
随机推荐
- [LeetCode 题解]: Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...
- 纯分享scp协议如何工作
scp协议是什么, wiki上说: Secure copy or SCP is a means of securely transferring computer files between a lo ...
- Replication--分区+复制
1>配置订阅表使用分区,在发布的项目属性中设置"复制分区方案"和"复制索引分区方案"为true,然后初始化订阅 2>在发布数据库上修改发布属性 -- ...
- html 线条重叠变粗
加入属性 单元格重叠变粗 使用border-collapse:collapse; 可以解决.
- kvm虚拟机动态迁移
相比KVM虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可 ...
- ACM-ICPC 2018青岛网络赛-H题 Traveling on the Axis
题目:略(不知道怎么从ZOJ搬题) 地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4054 把这题的每个点分成两种情况 ...
- Python+selenium 模拟wap端页面操作
from selenium.webdriver.chrome.options import OptionsmobileEmulation = {'deviceName': 'iPhone X'}opt ...
- 40个迹象表明你还是PHP菜鸟
你是PHP菜鸟,如果你: 1. 不会利用如phpDoc这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio或Eclipse PDT视而不见3. 从未用过任何形式的版本控制系 ...
- JavaWeb学习笔记(十六)—— 事务
一.事务概述 1.1 什么是事务 银行转账!张三转10000块到李四的账户,这其实需要两条SQL语句: 给张三的账户减去10000元: 给李四的账户加上10000元. 如果在第一条SQL语句执行成功后 ...
- 网络基础 01_OSI网际互联
1 通信概述 网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的. 通信是人与人之间通过某种媒体进行的信息交流与传递. 网络通信是通过网络将各个孤立的设备进 ...