根据basic auth请求https获取token
根据basic auth请求https获取token
对接第三方接口,给了接口文档,但是没有示例代码,postman一直可请求成功,java就是不行。百思不得其解,最后请求公司大神,得到一套秘籍。
第一步
第二步
Authorization:Bearer access_token。其中,Bearer为固定字符串,后面包含一个空格,access_token表示实际获取到的token。
第三步:写出代码。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.spcp.platform.common.util.StringUtil;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.springframework.http.*;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public String getToken() {
String token = "";
try {
TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();
SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(
sslContext, new NoopHostnameVerifier());
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslFactory)
.build();
HttpComponentsClientHttpRequestFactory factory =
new HttpComponentsClientHttpRequestFactory();
factory.setConnectTimeout(3600000);
factory.setReadTimeout(3600000);
factory.setHttpClient(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
// 要请求的URL
String requestUrl = "https://110:39/oauth/token?grant_type=client_credentials";
// header根据实际情况设置,没有就空着
MultiValueMap<String, String> params = new HttpHeaders();
params.add("grant_type", "client_credentials-aqjc");
HttpHeaders headers = new HttpHeaders();
// 加密后的用户名和密码,这个替换成加密后的
headers.add("Authorization", "Basic d2666666666666==");
//headers.add("Content-Type", "application/x-www-form-urlencoded");
HttpEntity<?> requestEntity = new HttpEntity<>(params, headers);
// 发送请求并接收响应
ResponseEntity<String> response = restTemplate.exchange(requestUrl, HttpMethod.POST, requestEntity, String.class);
// 获取响应体
String responseBody = response.getBody();
// 输出响应体内容
Map<String, String> resMap = new ObjectMapper().readValue(responseBody, new TypeReference<Map<String, String>>() {
});
token = resMap.get("access_token");
} catch (Exception e) {
e.printStackTrace();
}
return token;
}
总结:其实挺难的,尤其https认证。
原文地址:https://blog.csdn.net/weixin_43988238/article/details/142824057
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!