package com.example.unusualsounds.common.utils; import static com.baidubce.auth.SignOptions.DEFAULT; import com.baidubce.auth.BceCredentials; import com.baidubce.auth.BceV1Signer; import com.baidubce.auth.DefaultBceCredentials; import com.baidubce.http.HttpMethodName; import com.baidubce.internal.InternalRequest; import com.baidubce.util.JsonUtils; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.net.URI; import java.util.HashSet; import java.util.Map; import java.util.Set; public final class BaiDuUtils { /** * 发送请求 * * @param uriStr uri路径 * @param httpMethodName 请求方式 * @param requestBody 请求体 * @param requestParams 请求参数 * @param t 响应体类型 * @param 响应 * @return */ public static ResponseEntity sendRequest(String uriStr, HttpMethodName httpMethodName, Object requestBody, Map requestParams, Class t, String ak, String sk,String endpoint, String uriPathPrefix) { String signUrl = String.format("%s%s", endpoint, uriStr); URI uri = URI.create(signUrl); InternalRequest request = new InternalRequest(httpMethodName, uri); // 构建请求 url String url = String.format("%s%s%s", endpoint, uriPathPrefix, uriStr); // 构建查询参数 if (requestParams != null && !requestParams.isEmpty()) { url = url.concat("?"); for (Map.Entry entry : requestParams.entrySet()) { request.addParameter(entry.getKey(), entry.getValue()); url = url.concat(entry.getKey()).concat("=").concat(entry.getValue()).concat("&"); } url = url.substring(0, url.length() - 1); } // 构建签名 BceCredentials credentials = new DefaultBceCredentials(ak, sk); BceV1Signer bce = new BceV1Signer(); Set setString = new HashSet<>(); setString.add("Host"); DEFAULT.setHeadersToSign(setString); bce.sign(request, credentials, DEFAULT); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", request.getHeaders().get("Authorization")); headers.add("Host", request.getHeaders().get("Host")); HttpEntity requestEntity; if (requestBody != null) { String requestJson = JsonUtils.toJsonString(requestBody); requestEntity = new HttpEntity<>(requestJson, headers); } else { requestEntity = new HttpEntity<>(headers); } //使用headers方法设置GET请求的头信息, 返回 return restTemplate.exchange(url, HttpMethod.valueOf(httpMethodName.name()), requestEntity, t); } }