JAVA 의 텐 센트 클 라 우 드 생방송 실현
public static T TecentDoPostJsonV3(String url,String key,String secretId, TecentPublicParams header, String json, OkHttpClient httpClient, Class clazz) throws Exception {
// ************* 1: *************
String date = DateUtils.format(new Date(Long.valueOf(header.getX_TC_Timestamp() + "000")),DateUtils.FORMAT_SHORT);
String service = url.substring(0,url.indexOf(".")); // live
System.out.println(json);
String canonicalRequest ="POST
" +
"/
" +
"
" +
"content-type:application/json; charset=utf-8
" +
"host:"+url+"
" +
"
" +
"content-type;host
" +
sha256Hex(json);
System.out.println(canonicalRequest);
// ************* 2: *************
String credentialScope = date+ "/" + service + "/" + "tc3_request";
String hashedCanonicalRequest = sha256Hex(canonicalRequest);
String algorithm = "TC3-HMAC-SHA256";
String stringToSign = algorithm + "
" + header.getX_TC_Timestamp() + "
" + credentialScope + "
" + hashedCanonicalRequest;
System.out.println(stringToSign);
// ************* 3: *************
byte[] secretDate = hmac256(("TC3" + key).getBytes(CHARSET), date);
byte[] secretService = hmac256(secretDate, service);
byte[] secretSigning = hmac256(secretService, "tc3_request");
String signature = DatatypeConverter.printHexBinary(hmac256(secretSigning, stringToSign)).toLowerCase();
System.out.println(signature);
// ************* 4: Authorization *************
String authorization = algorithm + " " + "Credential=" + secretId + "/" + credentialScope + ", "
+ "SignedHeaders=" + "content-type;host" + ", " + "Signature=" + signature;
System.out.println(authorization);
header.setAuthorization(authorization);
JSONObject jsonObject = (JSONObject)JSON.toJSON(header);
RequestBody requestBody = RequestBody.create(CONTENT_TYPE, json);
Request.Builder builder = new Request.Builder();
for (Map.Entry entry:jsonObject.entrySet()) {
if(entry.getValue()==null){
continue;
}
builder.addHeader(String.valueOf(entry.getKey()).replaceAll("_","-"),String.valueOf(entry.getValue()));
}
// okhttp3
try {
Response response = httpClient.newCall((builder).url("https://"+url).post(requestBody).build()).execute();
String request = response.body().string();
T t = JSON.parseObject(request, clazz);
return t;
} catch (IOException var8) {
throw new ApiProcessException(ErrorCode.HTTP_REQUEST_ERROR, var8.getMessage());
}
}
public static byte[] hmac256(byte[] key, String msg) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, mac.getAlgorithm());
mac.init(secretKeySpec);
return mac.doFinal(msg.getBytes(CHARSET));
}
공통 매개 변수 실체 클래스
public class TecentPublicParams {
private String X_TC_Action;
private String X_TC_Region;
private String X_TC_Timestamp = Long.toString(System.currentTimeMillis() / 1000);
private String X_TC_Version;
private String Authorization;
private String X_TC_Language = "zh-CN";
private String X_TC_Token;
public String getX_TC_Action() {
return X_TC_Action;
}
public void setX_TC_Action(String x_TC_Action) {
X_TC_Action = x_TC_Action;
}
public String getX_TC_Region() {
return X_TC_Region;
}
public void setX_TC_Region(String x_TC_Region) {
X_TC_Region = x_TC_Region;
}
public String getX_TC_Timestamp() {
return X_TC_Timestamp;
}
public void setX_TC_Timestamp(String x_TC_Timestamp) {
X_TC_Timestamp = x_TC_Timestamp;
}
public String getX_TC_Version() {
return X_TC_Version;
}
public void setX_TC_Version(String x_TC_Version) {
X_TC_Version = x_TC_Version;
}
public String getAuthorization() {
return Authorization;
}
public void setAuthorization(String authorization) {
Authorization = authorization;
}
public String getX_TC_Language() {
return X_TC_Language;
}
public void setX_TC_Language(String x_TC_Language) {
X_TC_Language = x_TC_Language;
}
public String getX_TC_Token() {
return X_TC_Token;
}
public void setX_TC_Token(String x_TC_Token) {
X_TC_Token = x_TC_Token;
}
}
호출 방법
String tencentLiveApi = "live.tencentcloudapi.com";
String SECRET_KEY = "***"; // key
String SECRET_ID = "***"; //
TecentPublicParams tecentPublicParams = new TecentPublicParams();
tecentPublicParams.setX_TC_Action("DescribeLiveStreamPublishedList"); //
tecentPublicParams.setX_TC_Version("2018-08-01");
TreeMap keyValues = new TreeMap(); //
keyValues.put("DomainName","***");
keyValues.put("EndTime", DateUtils.format(new Date(),"yyyy-MM-dd'T'HH:mm:ss'Z'"));
keyValues.put("StartTime", DateUtils.format(DateUtils.addDay(new Date(),-30),"yyyy-MM-dd'T'HH:mm:ss'Z'"));
String back ="";
try {
back = LiveUtils.TecentDoPostJsonV3(tencentLiveApi,SECRET_KEY,SECRET_ID,tecentPublicParams,JSON.toJSONString(keyValues),httpClient,String.class);
} catch (Exception e) {
e.printStackTrace();
}
JAVA 가 텐 센트 클 라 우 드 생방송 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 JAVA 텐 센트 클 라 우 드 생방송 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.