public static void main(String[] args){
Map<String,Object> map = new TreeMap<String, Object>();
map.put("Action","TextTranslate");
map.put("Nonce",new Random().nextInt(1000));
map.put("ProjectId",1257137196);
map.put("Region","ap-guangzhou");
map.put("SecretId","secretId");
map.put("Timestamp",System.currentTimeMillis()/1000);
map.put("Version","2018-03-21");
map.put("Source","jp");
map.put("SourceText","ひさしぶりのカレッタ汐留。気づくと人気店だったお店がいくつか無くなっていたりする。 そして心なしか、以前よりもすいている気もします。 無くなった人気店もありましたが、鼎泰豐は元気に営業されていました。 お昼時に入店です。 お目当てはもちろん小籠包。 普通に豚肉の小籠包でも満足なのですが、 豚肉・ホタテ・蟹みそのセットがありました。 蟹みそなんて、とっても旨そうです。 ビールと一緒に注文。 ビールをのみのみ10分程で小籠包も到着。 お店の人が蓋をとると、小籠包が6つ。 目印がついていて、それぞれ見分けがつくようになってました。 まず豚肉。かわらず美味しい小籠包。 以前着たときは液面がくっきり見えるほどの皮の薄さだったのですが、 ちょいと換わった感じがします。 ホタテも蟹みそも、ちゃんとそれぞれの風味を感じられる小籠包です。 ここらへんは、はずさないところが人気店ですね。 で、最後に餡子の小籠包。 こちらは当然ながら中にスープは無く、 あんこ玉を小籠包生地でくるんだデザート小籠包。 むっちりとした生地にしっかり餡子で、可愛く美味しいデザートです。 客層は家族連れからカップルまで、場所柄とても幅広い客層で どなたがきても居心地悪そうな感じがしない。 とても使い勝手のいいお店だと思います。");
map.put("Target","zh");
StringBuilder sb = new StringBuilder();
sb.append("GET").append("tmt.tencentcloudapi.com/").append("?");
for(Map.Entry entry:map.entrySet()){
sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
sb.deleteCharAt(sb.length() -1);
String sign = Base64.encodeBase64String(genHMAC(sb.toString(),"secretKey"));
map.put("Signature",sign);
StringBuilder url = new StringBuilder();
url.append("https://tmt.tencentcloudapi.com").append("?");
for(Map.Entry entry:map.entrySet()){
url.append(entry.getKey()).append("=").append(URLEncoder.encode(String.valueOf(entry.getValue()))).append("&");
}
url.deleteCharAt(url.length() -1);
System.out.println(url);
}
public static byte[] genHMAC(String data, String key) {
byte[] result = null;
try {
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
//用给定密钥初始化 Mac 对象
mac.init(signinKey);
//完成 Mac 操作
byte[] rawHmac = mac.doFinal(data.getBytes());
return rawHmac;
} catch (Exception e) {
throw new TranslationException("HmacSHA1签名错误");
}
}