tencent_get_appid_probe.dart
2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';
Future<void> main() async {
const secretId = 'AKID9Vgy8FEC5qSxLcllVCmXzJWaVSI0Z2Nb';
const secretKey = 'c2c5MTOBo5d9XilhaLzVSG4DE7qRuCJF';
const service = 'cam';
const host = 'cam.tencentcloudapi.com';
const version = '2019-01-16';
const action = 'GetUserAppId';
const region = '';
const payload = '{}';
final int ts = DateTime.now().millisecondsSinceEpoch ~/ 1000;
final String date = DateTime.fromMillisecondsSinceEpoch(ts * 1000, isUtc: true)
.toIso8601String()
.substring(0, 10);
final String hashedPayload = sha256.convert(utf8.encode(payload)).toString();
final String canonicalHeaders = 'content-type:application/json; charset=utf-8\n'
'host:$host\n'
'x-tc-action:getuserappid\n';
const signedHeaders = 'content-type;host;x-tc-action';
final String canonicalRequest = 'POST\n/\n\n$canonicalHeaders\n$signedHeaders\n$hashedPayload';
final String hashedCanonicalRequest = sha256.convert(utf8.encode(canonicalRequest)).toString();
final String credentialScope = '$date/$service/tc3_request';
final String stringToSign = 'TC3-HMAC-SHA256\n$ts\n$credentialScope\n$hashedCanonicalRequest';
final List<int> secretDate = Hmac(sha256, utf8.encode('TC3$secretKey')).convert(utf8.encode(date)).bytes;
final List<int> secretService = Hmac(sha256, secretDate).convert(utf8.encode(service)).bytes;
final List<int> secretSigning = Hmac(sha256, secretService).convert(utf8.encode('tc3_request')).bytes;
final String signature = Hmac(sha256, secretSigning).convert(utf8.encode(stringToSign)).toString();
final String authorization = 'TC3-HMAC-SHA256 '
'Credential=$secretId/$credentialScope, '
'SignedHeaders=$signedHeaders, '
'Signature=$signature';
final HttpClient client = HttpClient();
try {
final HttpClientRequest req = await client.postUrl(Uri.parse('https://$host/'));
req.headers.set('Authorization', authorization);
req.headers.set('Content-Type', 'application/json; charset=utf-8');
req.headers.set('Host', host);
req.headers.set('X-TC-Action', action);
req.headers.set('X-TC-Timestamp', '$ts');
req.headers.set('X-TC-Version', version);
if (region.isNotEmpty) req.headers.set('X-TC-Region', region);
req.write(payload);
final HttpClientResponse res = await req.close();
final String body = await res.transform(utf8.decoder).join();
print('HTTP ${res.statusCode}');
print(body);
} finally {
client.close();
}
}